【问题标题】:What is the intent of this SQL statement?这个 SQL 语句的意图是什么?
【发布时间】:2021-10-11 22:26:45
【问题描述】:

我遇到了以下问题:

DECLARE @UpdateDtm datetime = DATEADD(dd, 0, DATEDIFF(dd, 0, DATEADD(minute, -10, GETDATE())))
SELECT @UpdateDtm

它返回今天的日期:2021-10-11 00:00:00.000,但我并不完全理解其中的逻辑。首先它从GetDate 中减去 10 分钟,然后得到该时间与开始时间之间的天数差。然后它将差异(再次以天为单位)添加到时间的开始。

据我所知,它可以简单地替换为CAST(GETDATE() AS Date)。我在这里遗漏了什么吗?

【问题讨论】:

  • 正确,在这种情况下确实可以替换为cast,但它是截断到任意点的通用公式
  • 嗯,-10 意味着在一天的前 10 分钟,你的结果仍然是昨天,所以不能被演员取代。

标签: sql sql-server tsql sql-server-2017


【解决方案1】:

目的是获取午夜到 10 分钟前的日期。因此,对于(大致)现在,2021-10-11T22:30:30 (UTC) 这将返回2021-10-11T00:00:00。但是,如果它是 2021-10-11T00:07:30,它将返回 2021-10-10T00:00:00

为什么不只是CAST/CONVERT 约会,我不确定。也许它最初是在 2008 年之前写的?

SELECT CONVERT(date, DATEADD(minute,-10, GETDATE());

【讨论】:

  • 在引入 DATE 之前,这是截断日期时间的时间部分的模式之一。另一个是通过 varchar 截断字符串的时间部分进行强制转换。
  • @DavidBrowne-Microsoft 这就是为什么我说“也许它最初是在 2008 年之前写的?”
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2017-03-20
  • 2012-01-05
  • 2021-12-25
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
相关资源
最近更新 更多