为什么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 Server上工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40528143/

10-10 03:35
查看更多