2010-10-21 38 views
4

在我的SQL Server的安裝,如果我執行以下SQL Server的日期投放問題

SELECT CAST('2008-05-03 00:00:00' AS DATETIME), CAST('2008-05-03T00:00:00' AS DATETIME) 

然後我得到以下結果

2008-03-05 00:00:00.000 2008-05-03 00:00:00.000 

現在,這本身就是奇因爲我不確定爲什麼它解析的第一個日期爲yyyy/dd/mm(我的登錄設置爲英國英語btw),並且該日期格式不是標準的AFAIK。

我不確定從哪裏開始戳,試圖解決這個奇怪的解析問題,這似乎並沒有發生在我的任何同事系統中。

回答

3

您的第一種格式實際上是一種語言相關格式(ODBC規範),並且由於您的系統被定義爲「英式英語」,因此它將被解釋爲YYYY-DD-MM(如果它是「美式英語」,它將被解釋作爲YYYY-MM-DD)。

但是,第二個是ISO-8601 standard date formatWikipedia),它可以在任何SQL Server安裝上工作,無論您的語言或語言環境設置如何。它的格式是總是YYYY-MM-DDTHH:MM:SS並將被解釋爲這樣。

試試這個:

SET LANGUAGE british 

SELECT 
    CAST('2008-05-03 00:00:00' AS DATETIME) 'UK Date', 
    CAST('2008-05-03T00:00:00' AS DATETIME) 'UK ISO Date' 

SET LANGUAGE us_english 

SELECT 
    CAST('2008-05-03 00:00:00' AS DATETIME) 'US Date', 
    CAST('2008-05-03T00:00:00' AS DATETIME) 'US ISO Date' 

我的輸出是:

UK Date     UK ISO Date 
2008-03-05 00:00:00.000 2008-05-03 00:00:00.000 

US Date     US ISO Date 
2008-05-03 00:00:00.000 2008-05-03 00:00:00.000 
+0

因爲第一個,「2008-05-03 00:00:00」,被解釋爲yyyy-MM-DD每隔有趣分貝在我們的企業(50+),而不是我的服務器似乎做的yyyy-dd-mm。 – 2010-10-21 14:15:59

+0

@Chris Meek:男孩,那些日期轉換有時真的會變得混亂!現在更新我的答案,並希望得到正確的陳述...... – 2010-10-21 14:45:18

+0

@Chris服務器的日期格式設置爲什麼?請記住,即使在英式英語服務器上進行安裝,SQL Server仍默認使用美國格式的現成... – 2010-10-21 15:05:14

1

您可以用轉換呢?這將允許您指定的日期格式,我不知道你能做到用鑄:

SELECT CONVERT(DATETIME, '2008-05-03 00:00:00', 120), CONVERT(DATETIME, '2008-05-03T00:00:00', 126) 

你可以看看各種格式的位置:http://msdn.microsoft.com/en-us/library/ms187928.aspx

1

它使用配置整理如在你的會話中。您可避免歧義設定日期格式符合

SET dateformat dmy 
SELECT CAST('2008-05-03 00:00:00' AS DATETIME), CAST('2008-05-03T00:00:00' AS DATETIME) 
-- 2008-03-05 00:00:00.000 2008-05-03 00:00:00.000 

SET dateformat mdy 
SELECT CAST('2008-05-03 00:00:00' AS DATETIME), CAST('2008-05-03T00:00:00' AS DATETIME) 
-- 2008-05-03 00:00:00.000 2008-05-03 00:00:00.000