2016-11-10 37 views
1

为什么DATEDIFF接受yyyymmdd格式?是不是仅适用于yyyy-mm-dd格式?DATEDIFF工作在yyyymmdd格式SQL服务器

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

DATEDIFF(DAY, 20161201, 20161231); 

It gives answer 30 

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

It gives 31 

感谢,

艾登

+3

实际上,对于日期常量在SQL Server标准*是*年月日,不带连字符。连字符版本几乎适用于所有国际化设置(有一个例外)。我更喜欢使用复合版本,因为我是一个人,并且更容易阅读。 –

+0

哇......太棒了......谢谢!!!如果您发布答案,我会将其标记为答案 – Aiden

+1

@GordonLinoff只是好奇。什么是一个例外? –

回答

1

这可能是一个有点硬梳理出来,但在文档"Supported String Literal Formats for date"中有解释。

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

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

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

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