SQL Server: сравнение дня datetime с GETDATE()

у меня есть хранимая процедура, которая должна извлекать все записи с датой, равной текущей дате или в будущем. Даты сохраняются в столбце targetDate и форматируются как datetime. Мое соответствующее предложение WHERE следующее:

WHERE A.targetDate >= GETDATE()

В общем, моя хранимая процедура работает нормально, моя единственная проблема заключается в том, что targetDate равен текущей дате, поскольку все даты сохраняются следующим образом, т. е. со временем, установленным на нули:

2014-02-22 00:00:00.000

Как я должен изменить мой Где предложение так, чтобы оно учитывало только дату, но игнорировало время, сохраненное с ней, чтобы я получал любые записи с текущей датой, даже если время уже прошло ?

большое спасибо за любую помощь в этом, Тим.

2 ответов


заменить на:

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

Edit-потому что targetdate также содержит время, да, форматируйте оба так:

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

редактировать-учитывая комментарии re: производительность, может потребоваться попробовать:

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

последнее редактирование должно дать вам тот же результат и воспользоваться любыми индексами на targetdate


следующее должно дать вам текущую дату без времени:

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

Это должна быть ваша последняя строка:

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