DELETE from Table WHERE Date > GETDATE();
GETDATE()包括时间。而不是
2011-01-26 14:58:21.637
我怎样才能得到:
2011-01-26 00:00:00.000
答案 0 :(得分:73)
对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 - 在这种情况下你将直接在GETDATE上使用CONVERT方法( ),例如
convert(varchar, GETDATE() +1, 102)
答案 1 :(得分:9)
对于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
答案 2 :(得分:7)
这是特定于数据库的。您尚未指定正在使用的数据库引擎。
e.g。在PostgreSQL中你做了演员(myvalue as date)。
答案 3 :(得分:5)
SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101))
答案 4 :(得分:0)
您可以使用
DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101);
答案 5 :(得分:-1)
CONVERT(varchar,GETDATE(),102)
答案 6 :(得分:-1)