2016-11-10 42 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'總是被正確解釋。因此,這是日期/時間的明確格式。

注意:由於您使用的函數需要日期,因此如果整數有效,那麼它將使用其字符串表示形式轉換爲日期。通常,日期常量應該用單引號括起來。