私は前月の最初と最後の日を取得しようとしています。私が本当に必要とするのは、BETWEEN
句の範囲です。そのため、最初の日の最初の秒と最後の日の最後の秒が必要です。前月の最初と最後の日付を取得する最も簡単で効率的な方法は何ですか?
これは私が使用してきたコードです:
set @startDate = DATEADD(mm, DATEDIFF(mm,0,DATEADD(mm, -1, getdate())), 0)
set @endDate = dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate() ), 0))
しかし、今日のために、これは実際には完全に正確ではありませんこれは、2011年4月1日と2011年5月1日を返しています。私はendDateの4/30/2011の最後の1秒を取得したい。
私はグーグルであり、1か月の最初/最後の日にはさまざまな方法があります。 SOそのものであっても、私は多くの異なった答えでこの質問の多くの異なった変形を見る。私はこれを達成するためのすべてのメソッドのリストをコンパイルし、どれが "ベスト"であるかを判断したいと思います(簡略化と効率性に基づいて)
(私はSQL Server 2000を使用しています)
EDIT:ENDDATEバグ再
- このコードは実際には正しいが、問題は@endDate
がsmalldatetime型だけだったということでした。日時に変更しました。これが正しく動作しています。
Re:編集。これは、 '> = AND <' 'を使用してエラー、バグ、複雑さなどの範囲を減らす方法の例です。 – MatBailie