爲什麼SQL Server(2005)會誤解此ISO 8601格式日期? (YYYY-MM-DD)爲什麼SQL Server誤解了這個ISO 8601格式的日期?
DECLARE @FromDate DATETIME
SET @FromDate = '2013-01-05'
PRINT @FromDate
-- Prints: May 1 2013 12:00AM
文本格式的日期,顯然是月5日,但由於某種原因,SQL服務器將其解釋爲5月1日。世界上沒有日期格式是YYYY-DD-MM,那麼爲什麼會發生這種情況呢?我一直使用這種格式多年,從來沒有問題,所以我不確定在這種情況下有什麼不同。
即使我使用CONVERT迫使它變成ISO8601,它仍然得到一個錯誤:
DECLARE @FromDate DATETIME
SET @FromDate = CONVERT(VARCHAR, '2013-01-05', 126)
PRINT @FromDate
-- Still prints: May 1 2013 12:00AM
編輯:哎呀 - 我使用「CONVERT(VARCHAR上面,我真的是CONVERT(DATETIME)所以這就是爲什麼這是不採取任何影響。由於@RBarryYoung
但是如果我在不同的服務器上運行任何的以上兩個例子(SQL 2012)它們都正確打印「2013年1月5日12:00 AM」
什麼是「在這裏發生?我認爲在SQL Server中使用ISO格式的主要原因之一是它使月份和日期明確無誤?
實際上,'YYYY-DD-MM'是法語的區域設置日期的格式(見本[連接](HTTP://連接.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID = 290971)嘗試讓它折舊的頁面!)爲您的文字嘗試'YYYYMMDD'格式 - 我徹底推薦[本文](http://sqlblog.com/博客/ aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx)由MVP Aaron Bertrand撰寫。 – Bridge
謝謝@Bridge - 這是非常有用的(但我的服務器不是法語,所以我仍然感到困惑!) – NickG
如果在SQL字符串中指定日期,我總是使用''2013年1月5日'格式 - 它會解析這絕對不是含糊不清的。 – Charleh