如何使用MSSQL GetDate()获取日期?

soo*_*ise 74 sql t-sql sql-server datetime date

DELETE from Table WHERE Date > GETDATE();
Run Code Online (Sandbox Code Playgroud)

GETDATE()包括时间.而不是得到

2011-01-26 14:58:21.637
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到:

2011-01-26 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 78

对SQL Server略有偏见

摘要

DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)

SQL Server 2008 date虽然有类型.所以只需使用

CAST(GETDATE() AS DATE)
Run Code Online (Sandbox Code Playgroud)

编辑:要添加一天,请与"零"前一天进行比较

DATEADD(day, DATEDIFF(day, -1, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)

来自cyberkiwi:

不涉及2个函数的替代方案是(+1可以在括号中或者在括号内).

DATEDIFF(DAY, 0, GETDATE() +1)
Run Code Online (Sandbox Code Playgroud)

DateDiff 返回一个数字但是出于所有目的,无论你打算使用这个表达式,它都可以作为一个日期,除了直接将它转换为VARCHAR - 在这种情况下你可以直接在GETDATE()上使用CONVERT方法,例如

convert(varchar, GETDATE() +1, 102)
Run Code Online (Sandbox Code Playgroud)


Ric*_*iwi 10

对于SQL Server 2008,最好的和索引友好的方式是

DELETE from Table WHERE Date > CAST(GETDATE() as DATE);
Run Code Online (Sandbox Code Playgroud)

对于以前的SQL Server版本,日期数学将比转换为varchar更快.由于区域设置,即使转换为varchar也会给您错误的结果.

DELETE from Table WHERE Date > DATEDIFF(d, 0, GETDATE());
Run Code Online (Sandbox Code Playgroud)

注意:没有必要DATEDIFF用另一个包装DATEADD


Fol*_*ord 7

它是特定于数据库的.您尚未指定要使用的数据库引擎.

例如在PostgreSQL中你做了演员(myvalue as date).

  • 你的意思是GETDATE()还不够线索? (3认同)

Joh*_*car 5

SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101))
Run Code Online (Sandbox Code Playgroud)