目前正在使用下述代碼如何在SQL中相對於系統文化轉換日期?
CONVERT(DATETIME, "16-05-2015 21:27:25.280",105)
使用這個它在我的系統文化工作和我們在英國的客戶之一。 但在我們的美國客戶面臨問題。
錯誤消息:
一個nvarchar數據類型爲datetime數據類型的轉換導致外的範圍內的值
所以有任何方式的字符串轉換爲DATETIME
依賴於.net中的系統文化。
在此先感謝
Thejus電視
目前正在使用下述代碼如何在SQL中相對於系統文化轉換日期?
CONVERT(DATETIME, "16-05-2015 21:27:25.280",105)
使用這個它在我的系統文化工作和我們在英國的客戶之一。 但在我們的美國客戶面臨問題。
錯誤消息:
一個nvarchar數據類型爲datetime數據類型的轉換導致外的範圍內的值
所以有任何方式的字符串轉換爲DATETIME
依賴於.net中的系統文化。
在此先感謝
Thejus電視
的各種設置(語言,日期格式)僅影響如何DateTime
向您顯示在SQL Server Management Studio中 - 或者它是如何解析的,當你試圖將字符串轉換爲DateTime
。
SQL Server支持多種格式 - 請參閱MSDN Books Online on CAST
and CONVERT
。這些格式中的大多數是,依賴於,因此您可以設置哪些設置 - 因此,這些設置可能會工作一些 - 有時不會。
解決這個問題的方法是使用(稍作改動)ISO-8601日期由SQL Server支持的格式 - 這種格式的作品總是 - 不管你的SQL Server的語言和日期格式設置。
的ISO-8601 format由SQL Server支持有兩種形式:
YYYYMMDD
只是日期(沒有時間部分);請注意:沒有破折號!,這非常重要! YYYY-MM-DD
是不是獨立於您的SQL Server中的dateformat設置,並將非在所有情況下工作!或:
YYYY-MM-DDTHH:MM:SS
的日期和時間 - 這裏需要注意:這種格式有破折號(但他們可以可省略),並固定T
的日期和時間之間的分隔符你的部分DATETIME
。這對SQL Server 2000及更新版本有效。
如果你使用SQL Server 2008或更高版本和DATE
數據類型(僅DATE
- !不DATETIME
),那麼你的確可以同時使用YYYY-MM-DD
格式,將工作,也與任何設置在你的SQL Server 。
不要問我爲什麼這整個話題如此棘手,有點令人困惑 - 這就是它的方式。但使用YYYYMMDD
格式,對於任何版本的SQL Server以及SQL Server中的任何語言和dateformat設置,都應該可以。
如果您只需要日期部分,則SQL Server 2008及更新版本的建議是使用DATE
;如果需要日期和時間,則建議使用DATETIME2(n)
。如果可能,您應該嘗試開始逐步取消DATETIME
數據類型
「YYYYMMDD」不是** ISO格式。只有日期的ISO格式是'YYYY-MM-DD' –
@a_horse_with_no_name:是的 - 理論上,你是對的 - 但是'YYYY-MM-DD'是***不是***獨立於SQL Server的語言 - 試試吧'SET LANGUAGE german SELECT CAST('2015-05-25'AS DATETIME)' - 這會導致**錯誤**!但是'SET LANGUAGE german SELECT CAST('20150525'AS DATETIME)'按預期工作(這僅適用於** DATETIME數據類型 - 使用DATE或DATETIME2(n)就好) –
@marc_s在我的情況下,輸入日期時間因系統日期格式而異。有時它可能是dd-mm-yyyyy,有時可能是mm-dd-yyyy。 – thejustv