0

(空気意見へのわずかな招待)

これは、2か月前の月の最初の月を返す最も効率的で受け入れられている方法ですか。

SELECT DATEADD(mm,-2,GETDATE() - DAY(GETDATE())) + 1
4

2 に答える 2

3

これが速いかどうかはわかりませんが...

SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()) -2, 0) 

SQLフィドル

「1900-01-01」からの月の差を計算します。

DATEDIFF(m, 0, GETDATE())  -- 1356

差額を「1900-01-01」から 2 か月引いた値に加算します

于 2013-01-30T15:27:45.413 に答える
1

たった 2 つの操作:

SELECT DATEADD(month,DATEDIFF(month,'20010301',GETDATE()),'20010101')

これは、日付を「正規化」して日時情報を削除しながら、2 つの固定日付間の関係を利用して 2 か月の削除を含めます。


これが優れているところは、これを使用して、より多くのフープをジャンプせずに正しく取得するのが難しい他のトリックを達成できることです。2 か月前の月末日など:

SELECT DATEADD(month,DATEDIFF(month,'20010301',GETDATE()),'20010131')

その月の日数が 31 日未満の場合でも問題が解決されます

于 2013-01-30T15:41:43.883 に答える