使用 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)? [复制]

如何在 MSSQL 中获取最近 6 周的开始日期和结束日期

[MSsql] 如何查询近30天的数据

SQL获取当前日期的年月日时分秒数据

MsSQL如何在一次查询中从给定的日期和仓库号获取最近的未来值和值的总和

js获取当前年,月,日,时,分,秒