使用精度为0的SQL Server DateTime2代替内置的Date字段来表示日期会有什么影响?无论哪种情况,我的担忧是防止意外的时间输入,但我应该注意哪些存储或性能方面的考虑呢?
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字节
。这里提醒一下,当我将几个DATETIME2(0)列转换为DATE时,以确保它与列中的值(仅日期)对齐时,我遇到了一个问题。
使用DATE时,您不能使用像SELECT MyDate + 1 FROM..
或WHERE MyDate>0
这样的语句,而使用DATETIME2时可以,在MS-SQL中至少不行。当然,在我看来,DATETIME2允许您这样做,而DATE不允许,这没有任何意义。
DateTime2(0)
仍然允许您存储时间,而Date
则不会。 - JodyT