我已经声明了一个名为@dt的日期时间变量-
declare @dt Datetime = '2019-01-29 11:06:31.095'
当我选择变量时,它会给出错误的日期
select @dt --it gives '2019-01-29 11:06:31.097'
答案 0 :(得分:6)
根据manual:
datetime值四舍五入为.000,.003或.007秒,如下表所示。
提供的链接中的表格清楚地说明了您的值从'.095'
转换为'.097'
的原因:
User-specified value System stored value
-----------------------------------------------
01/01/98 23:59:59.999 1998-01-02 00:00:00.000
01/01/98 23:59:59.995
01/01/98 23:59:59.996
01/01/98 23:59:59.997
01/01/98 23:59:59.998 1998-01-01 23:59:59.997
答案 1 :(得分:4)
手册中未提及的是DATETIME
存储日期的分辨率为秒的1/300 ,即0.0033333333 ...秒的倍数。以下是一些文字和产生的日期时间值:
literal datetime
2019-01-29 11:06:31.094 2019-01-29 11:06:31.093
2019-01-29 11:06:31.095 2019-01-29 11:06:31.097
2019-01-29 11:06:31.096 2019-01-29 11:06:31.097
2019-01-29 11:06:31.097 2019-01-29 11:06:31.097
2019-01-29 11:06:31.098 2019-01-29 11:06:31.097
2019-01-29 11:06:31.099 2019-01-29 11:06:31.100
您应该开始使用DATETIME2
数据类型,该数据类型的范围更广(从0001到9999年)和精度更高(十进制后最多7位)。您可以将列声明为DATETIME2(3)
,使其在小数点后恰好具有三位数。
答案 2 :(得分:2)
docs中的日期时间:
准确性-舍入为.000,.003或.007秒的增量
将时间,日期,datetime2和datetimeoffset数据类型用于新 工作。这些类型符合SQL标准。它们更便携。 time,datetime2和datetimeoffset提供更高的秒精度。 datetimeoffset为全局部署提供时区支持 应用程序。