【问题标题】:How do I get just the date when using MSSQL GetDate()? [duplicate]使用 MSSQL GetDate() 时如何获取日期? [复制]
【发布时间】: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)

标签: sql sql-server tsql date datetime


【解决方案1】:

你可以使用

DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101);

【讨论】:

  • 返回一个字符串。最好不要依赖隐式转换。相反,将其显式转换为日期或日期/时间。
【解决方案2】:

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

例如在 PostgreSQL 中,你做 cast(myvalue as date)。

【讨论】:

  • 你的意思是 GETDATE() 还不够线索?
  • 我认为 OP 说的是“MSSQL”
【解决方案3】:

对 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)

【讨论】:

  • 如何在这个值上加一天?
  • 选择 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】:

【讨论】:

  • 抱歉,该链接不完整:它没有考虑 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...
  • 返回一个字符串。最好不要依赖隐式转换,而是将其显式转换为日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 2014-05-21
  • 2021-06-22
  • 2020-11-30
相关资源
最近更新 更多