【问题标题】:DATEDIFF working on yyyymmdd format SQL serverDATEDIFF 在 yyyymmdd 格式的 SQL 服务器上工作
【发布时间】:2016-11-10 21:51:41
【问题描述】:

为什么 DATEDIFF 接受 yyyymmdd 格式?不是只有yyyy-mm-dd格式吗?

当日期为 yyyymmdd 格式时,函数 DATEDIFF(datepart, start_date, end_date) 工作正常,例如

DATEDIFF(DAY, 20161201, 20161231);

It gives answer 30

如果你做 DATEDIFF(DAY, 20161201, 20161231) + 1 -- 包括结束日期

It gives 31

谢谢,

艾登

【问题讨论】:

  • 实际上,日期常量的 SQL Server 标准 YYYYMMDD,没有连字符。连字符版本适用于几乎所有国际化设置(有一个例外)。我更喜欢带连字符的版本,因为我是人类并且觉得它更容易阅读。
  • 哇……太棒了……谢谢!!!如果您发布答案,我会将其标记为答案
  • @GordonLinoff 只是好奇。唯一的例外是什么?
  • 连字符版本不能与 DATEFORMAT YDM 和 datetime 类型一起正常工作。它将适用于其他日期格式和其他日期时间类型(日期、日期时间2、日期时间偏移)。
  • 它在 SQL 2012 中不起作用。也许你在数字周围使用了单引号。

标签: sql sql-server


【解决方案1】:

这可能有点难以梳理,但在文档中的"Supported String Literal Formats for date"部分中进行了解释。

这有五个部分(但最后两个是特定于 API 的)。第一部分受国际化设置的影响,有很多不同的格式。

第二个是 ISO 8601 格式。我认为连字符格式与第一个表中的最后一个格式冲突(“yyyy dd mm”没有连字符)。

最后一节有这一行信息丰富的“六位或八位字符串总是被解释为 ymd”。因此,'YYYYMMDD' 总是被正确解释。因此,这是日期/时间的明确格式。

注意:因为您使用的函数需要日期,所以如果整数有效,则使用其字符串表示形式将其转换为日期。通常,日期常量应该用单引号括起来。

【讨论】:

    【解决方案2】:

    实际上它是 sql server 默认的日期格式,但您可以通过以下链接根据您的要求设置日期格式: http://www.sql-server-helper.com/sql-server-2012/format-function-vs-convert-function.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2014-04-14
      相关资源
      最近更新 更多