使用 MSSQL GetDate() 时如何获取日期? [复制]
Posted
技术标签:
【中文标题】使用 MSSQL GetDate() 时如何获取日期? [复制]【英文标题】:How do I get just the date when using MSSQL GetDate()? [duplicate] 【发布时间】:2011-06-16 03:33:03 【问题描述】:DELETE from Table WHERE Date > GETDATE();
GETDATE() 包括时间。而不是得到
2011-01-26 14:58:21.637
如何获得:
2011-01-26 00:00:00.000
【问题讨论】:
另外,请考虑您可能需要>=
而不是>
,否则您实际上会错过删除恰好是 2011-01-26 00:00:00.000 的记录...
好电话,实际上我在阅读此评论之前更改了它:)
一个简单的解决方案是cast(left(getdate(), 11) as datetime)
【参考方案1】:
你可以使用
DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101);
【讨论】:
返回一个字符串。最好不要依赖隐式转换。相反,将其显式转换为日期或日期/时间。【参考方案2】:它是特定于数据库的。您尚未指定您使用的数据库引擎。
例如在 PostgreSQL 中,你做 cast(myvalue as date)。
【讨论】:
你的意思是 GETDATE() 还不够线索? 我认为 OP 说的是“MSSQL”【参考方案3】:对 SQL Server 略有偏见
Best approach to remove time part of datetime in SQL Server Most efficient way in SQL Server to get date from date+time?总结
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)
【讨论】:
如何在这个值上加一天? 选择 CAST(GETDATE() + 1 AS DATE) @eidgenossen:简单,但依赖于隐式转换。不太清楚。【参考方案4】:对于 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
包裹
【讨论】:
没有 DATEADD 的“旧”样式依赖于基于 precedence 的从 int 到 date 的隐式转换。这实际上是 DATEADD 在实践中,不是吗?我自己更喜欢显式转换,尽管这看起来更简洁。 不确定 QO 是如何进行的,但没有理由手动请求 DATEADD。即使数据类型是日期时间,internally
在比较时也会转换为数值,因此最好将其保留为 int。【参考方案5】:
这里你有几个解决方案;)
http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm
【讨论】:
抱歉,该链接不完整:它没有考虑 dateadd/datediff 技术【参考方案6】:SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101))
【讨论】:
它确定输出字符串的格式,在本例中为 mm/dd/yyyy hh:mm:ss。因此 varchar(10) 会截断时间部分。【参考方案7】:CONVERT(varchar,GETDATE(),102)
【讨论】:
101、102等只是CONVERT函数的参数。我相信您实际上可能想要使用 mm/dd/yyyy 形式的 101,而我相信 102 的形式是 mm.dd.yyyy... 返回一个字符串。最好不要依赖隐式转换,而是将其显式转换为日期。以上是关于使用 MSSQL GetDate() 时如何获取日期? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GETDATE() 仅获取日期(mm/dd/yyyy)? [复制]