web-dev-qa-db-ja.com

SQL Server:日時とGETDATE()の比較

現在の日付または将来の日付に等しいすべてのレコードをフェッチするストアドプロシージャがあります。日付は列targetDateに保存され、datetimeとしてフォーマットされます。対応するWHERE句は次のとおりです。

WHERE A.targetDate >= GETDATE()

一般に私のストアドプロシージャは正常に動作しますが、私の唯一の問題は、すべての日付が次のように保存されるため、targetDateが現在の日付と等しいかどうか、つまり時刻をゼロに設定することです:

2014-02-22 00:00:00.000

WHERE句を変更して、日付のみを考慮し、保存された時間を無視して、時間がすでに過ぎていても現在の日付のレコードを取得するにはどうすればよいですか?

ティム、これに関する助けに感謝します。

10
user2571510

への変更:

WHERE A.targetDate >= cast(GETDATE() as date)

編集-targetdateには時刻も含まれているため、はい、両方とも次のようにフォーマットします。

WHERE cast(A.targetDate as date) >= cast(GETDATE() as date)

編集-コメントre:パフォーマンスを与え、試してみてください:

WHERE a.targetdate >= cast(cast(getdate() as date) as datetime)

最終編集でも同じ結果が得られ、targetdateのインデックスを活用する必要があります

22
Brian DeMilia

次のようにすると、現在の日付が時間なしで表示されます。

SELECT DATEADD(dd,0,DATEDIFF(dd,0,GETDATE()))

これが最終行です。

WHERE A.targetDate >= DATEADD(dd,0, ATEDIFF(dd,0,GETDATE()))
2
Preli