sql - DATEDIFF 在 yyyymmdd 格式的 SQL 服务器上工作

标签 sql sql-server

为什么 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

谢谢,

艾登

最佳答案

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

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

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

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

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

关于sql - DATEDIFF 在 yyyymmdd 格式的 SQL 服务器上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40528143/

相关文章:

sql - 如何在 T-SQL 中插入另一个表中的列?

c# - 时间和 DISTINCT 列之间的 sql 查询

mysql - 将列添加到表中并用该表中的现有列数据填充它

mysql - sql连接不在选择中

sql - 需要帮助识别表中的重复项

sql - 将计数设置为变量

sql-server - 从不同的两列中选择所有列

sql - 删除并重新创建主键

mysql - 对使用别名失败的派生表执行 LEFT Join

sql - SQL Server 中自动生成的约束名称是否相同?