DateTime2與SQL Server中的DateTime

哪個: sql

是在SQL Server 2008+中存儲日期和時間推薦方法嗎? spa

我知道精度(和存儲空間可能)的差別,但暫時忽略這些,是否有關於什麼時候使用什麼的最佳實踐文檔,或者咱們應該只使用datetime2.net


#1樓

datetime2在大多數方面獲勝,除了(舊應用程序兼容性) code

  1. 更大範圍的價值觀
  2. 更好的準確性
  3. 較小的存儲空間 (若是指定了可選的用戶指定精度)

SQL日期和時間數據類型比較 -  datetime,datetime2,date,TIME

請注意如下幾點 orm

  • 句法
    • datetime2 [(小數秒精度=>查看低於存儲空間大小)]
  • 精度,規模
    • 0到7位數,精度爲100ns。
    • 默認精度爲7位數。
  • 存儲大小
    • 6個字節,精度小於3;
    • 7個字節用於精度3和4。
    • 全部其餘精度須要8個字節
  • DateTime2(3)具備與DateTime相同的位數,但使用7個字節的存儲而不是8個字節( SQLHINTS- DateTime Vs DateTime2
  • datetime2上查找更多內容(Transact-SQL MSDN文章)

圖像源: MCTS Self-Paced Training Kit(考試70-432):Microsoft®SQLServer®2008 - 實施和維護第3章:表格 - >第1課:建立表格 - >第66頁 文檔


#2樓

DATETIME2的日期範圍爲「0001/01/01」至「9999/12/31」,而DATETIME類型僅支持1753-9999年。 字符串

此外,若是您須要, DATETIME2能夠在時間上更精確; DATETIME限制爲3 1/3毫秒,而DATETIME2能夠精確到100ns。 部署

這兩種類型都映射到.NET中的System.DateTime - 沒有區別。 get

若是您有選擇,我建議儘量使用DATETIME2 。 我沒有看到使用DATETIME任何好處(向後兼容性除外) - 你會遇到更少的麻煩(日期超出範圍而且麻煩這樣)。 it

另外:若是您只須要日期(沒有時間部分),請使用DATE - 它與DATETIME2同樣好,也能夠節省空間! :-)一樣只限時間 - 使用TIME 。 這就是這些類型的用途!


#3樓

使用非美國DATEFORMAT設置時,日期字符串到datetimedatetime2也可能不一樣。 例如

set dateformat dmy
declare @d datetime, @d2 datetime2
select @d = '2013-06-05', @d2 = '2013-06-05'
select @d, @d2

這將返回2013-05-06 (即五月六日)的datetime ,和2013-06-05進行(即六月五日) datetime2 。 然而, dateformat設置爲mdy ,既@d@d2回報2013-06-05

datetime行爲彷佛與SET DATEFORMATMSDN文檔不一致,後者指出: 某些字符串格式(例如ISO 8601)的解釋與DATEFORMAT設置無關 。 顯然不是真的!

直到我被這個咬了,我老是認爲yyyy-mm-dd日期只會被正確處理,不管語言/語言環境設置如何。


#4樓

datetime的MSDN文檔建議使用datetime2 。 如下是他們的建議:

使用timedatedatetime2datetimeoffset數據類型進行新工做。 這些類型與SQL標準一致。 它們更便攜。 timedatetime2datetimeoffset提供更多的秒精度。 datetimeoffset爲全局部署的應用程序提供時區支持。

datetime2具備更大的日期範圍,更大的默認小數精度和可選的用戶指定精度。 此外,根據用戶指定的精度,它可能使用較少的存儲空間。


#5樓

我認爲DATETIME2是存儲date的更好方法,由於它比DATETIME具備更高的效率。 在SQL Server 2008您可使用DATETIME2 ,它存儲日期和時間,須要6-8 bytes進行存儲,精度爲100 nanoseconds 。 因此任何須要更高時間精度的人都須要DATETIME2

相關文章
相關標籤/搜索