DELETE from Table WHERE Date > GETDATE();
GETDATE() включает время. Вместо того, чтобы получать
2011-01-26 14:58:21.637
Как я могу получить:
2011-01-26 00:00:00.000
DELETE from Table WHERE Date > GETDATE();
GETDATE() включает время. Вместо того, чтобы получать
2011-01-26 14:58:21.637
Как я могу получить:
2011-01-26 00:00:00.000
Небольшое смещение к SQL Server
Резюме
DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
SQL Server 2008 имеет тип date
. Поэтому просто используйте
CAST(GETDATE() AS DATE)
Изменить: добавить один день, сравнить с днем до "нуля"
DATEADD(day, DATEDIFF(day, -1, GETDATE()), 0)
Из cyberkiwi:
Альтернативой, которая не включает в себя 2 функции, является (+1 может находиться в скобках или у наших сторон).
DATEDIFF(DAY, 0, GETDATE() +1)
DateDiff
возвращает число, но для всех целей это будет работать как дата, где вы собираетесь использовать это выражение, за исключением преобразования его непосредственно в VARCHAR - в этом случае вы бы использовали подход CONVERT непосредственно в GETDATE(), например,
convert(varchar, GETDATE() +1, 102)
Для SQL Server 2008 лучшим и удобным для индексирования способом является
DELETE from Table WHERE Date > CAST(GETDATE() as DATE);
Для предыдущих версий SQL Server математика даты будет работать быстрее, чем конвертировать в varchar. Даже преобразование в varchar может дать неверный результат из-за региональных настроек.
DELETE from Table WHERE Date > DATEDIFF(d, 0, GETDATE());
Примечание: нет необходимости обертывать DATEDIFF
другим DATEADD
Эта база данных специфична. Вы не указали, какой механизм базы данных вы используете.
например. в PostgreSQL вы делаете бросок (myvalue как дата).
SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101))
Вы можете использовать
DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101);
CONVERT(varchar,GETDATE(),102)
Здесь у вас мало решений;)
http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm