2014-09-30 71 views
0

我使用SQL服務器插入查詢:SQL Server的日期時間問題,同時插入一條記錄

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, DateOfBirth) 
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', '30/09/2014'); 

注意DateOFBirthdd/mm/yyyy格式。

但是在SQL Server數據庫表中,它以yyyy/dd/mm格式插入,但不以yyyy/mm/dd格式插入。

請幫我解決問題。

在此先感謝。

回答

7

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或其他前端工具的設置。