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()))