SQL Server DateTime2(0)与Date的区别

13
使用精度为0的SQL Server DateTime2代替内置的Date字段来表示日期会有什么影响?无论哪种情况,我的担忧是防止意外的时间输入,但我应该注意哪些存储或性能方面的考虑呢?

2
DateTime2(0) 仍然允许您存储时间,而 Date 则不会。 - JodyT
你是指DateTime2和DateTime之间的区别吗?DateTime2在值的时间部分添加了更多精度 - abhi
@abhi,不是的。我在维护的一个项目中发现了差异,想知道为什么会有这样的差异。 - Oliver Kane
3个回答

25

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将在精度小于3的情况下使用6字节,而DATE将使用3字节
日期的大小是DATETIME(0)的一半,因此它也会表现得更好,因为SQL Server会处理更少的数据,并节省磁盘空间。

如何以dd/MM/yyyy格式显示日期?使用CONVERT(Date, FechaIni)或CAST(FechaIni AS DATE)。 - Kiquenet

9
无法实现。根据MSDN的说明,Datetime2的最小大小为六个字节,将包含hh:mm:ss,因此它可以(并且将)包含时间组件(默认为午夜)。正如其他回答者所指出的那样,您必须使用日期类型才能保证不保存时间部分并占用三个字节。
参考链接:https://technet.microsoft.com/en-us/library/bb677335%28v=sql.105%29.aspx

0

这里提醒一下,当我将几个DATETIME2(0)列转换为DATE时,以确保它与列中的值(仅日期)对齐时,我遇到了一个问题。

使用DATE时,您不能使用像SELECT MyDate + 1 FROM..WHERE MyDate>0这样的语句,而使用DATETIME2时可以,在MS-SQL中至少不行。当然,在我看来,DATETIME2允许您这样做,而DATE不允许,这没有任何意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接