2015-04-06 264 views
5

使用SQL Server的DateTime2(精度爲0)代表日期而不是內置Date字段會有什麼影響。SQL Server DateTime2(0)與日期

無論是哪種情況,我的擔心都是爲了防止意外時間輸入,但是我應該注意哪些存儲或性能方面的考慮?

+2

'DateTime2(0)'仍然允許您存儲時間。 '日期'不會。 – JodyT

+0

你的意思是DateTime2 v/s DateTime? DateTime2添加更多[精度](https://technet.microsoft.com/en-us/library/bb677335%28v=sql.105%29.aspx)到值的時間部分.. – abhi

+0

@abhi,nope。我看到了一個我正在維護的項目中的差異,並想知道爲什麼會有所不同。 –

回答

6

它不起作用。根據MSDN,Datetime2的最小大小是六個字節,並且將包含hh:mm:ss,因此它可以並且將包含時間分量(默認爲午夜)。正如其他響應者已經注意到,您必須使用日期類型來保證不保存時間部分並佔用三個字節。

https://technet.microsoft.com/en-us/library/bb677335%28v=sql.105%29.aspx

13

DateTime2(0)將日期時間存儲不帶小數值即YYYY-MM-DD hh:mm:ss

SELECT CONVERT(DateTime2(0) , GETDATE()) 
RESULT: 2015-04-06 20:47:17 

存儲數據,就像日期將只存儲日期即YYYY-MM-DD沒有任何時間值。

SELECT CONVERT(Date , GETDATE()) 
RESULT: 2015-04-06 

如果您只對日期有興趣,請使用DATE數據類型。

DATETIME2將使用6 bytes的精度less than 3DATE將使用3 bytes

日期是DATETIME(0)大小的一半,因此它的性能也會更好,因爲sql server會處理更少的數據並且也會節省磁盤空間。