SQL Server不以任何字符串格式存儲DateTime
- 它存儲爲8字節的數值。
各種設置(語言,日期格式)隻影響在SQL Server Management Studio中向您顯示DateTime
的方式 - 或者當您嘗試將字符串轉換爲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
數據類型:
INSERT INTO Customers (CustomerName, ContactName, Address,
City, PostalCode, DateOfBirth)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21',
'Stavanger', '4006', '20140930');
正確插入「2014年9月30日」到表 - 如何它顯示取決於您的SSMS或其他前端工具的設置。