前月の最初と最後の日を取得しようとしています。本当に必要なのはBETWEEN
句の範囲なので、初日の最初の1秒と、最後の日の最後の1秒が必要です。
これは私が使用しているコードです:
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の2011年4月30日の最後の1秒を取得したいと思います。
私はグーグルをしていて、月の最初/最後の日を取得するためのさまざまな方法を見ています。SO自体でも、この質問にはさまざまなバリエーションがあり、さまざまな答えがあります。これを達成するためのすべての方法のリストをまとめてから、どれが「最良」であるかを判断したいと思います(単純さと効率に基づいて)
(SQL Server 2000を使用していることを追加する必要があります)
編集:
終了日のバグについて-このコードは実際には正しいですが、問題はそれが小さな日付で@endDate
あったことだけでした。日時に変更しましたが、正常に動作しています