2015-04-06 266 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会处理更少的数据并且也会节省磁盘空间。