声明日期和所选日期不匹配



我声明了一个名为 @dt 的日期时间变量 -

declare @dt Datetime = '2019-01-29 11:06:31.095'

当我选择变量时,它给出了错误的日期

select @dt --it gives '2019-01-29 11:06:31.097'

根据手册:

日期时间值四舍五入为 .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

手册中没有提到的是,DATETIME存储日期的分辨率为 1/300 秒,即 0.00333333333 的倍数...... 第二。下面是一些文本和生成的日期时间值:

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),使其在小数点后正好有三位数字。

文档中的日期时间:

精度 - 四舍五入为 .000、.003 或 .007 秒的增量

将时间、日期、日期时间

2 和日期时间偏移量数据类型用于新的 工作。这些类型符合 SQL 标准。它们更便携。 time、datetime2 和 datetimeoffset 提供了更高的秒精度。 日期时间偏移量为全球部署提供时区支持 应用。

最新更新