从 DATETIME2 到 DATETIME 的意外舍入

Unexpected rounding-off from DATETIME2 to DATETIME

首先,它可能没有实际用途,只是想知道how/why这是怎么回事。

当我尝试将 DATETIME2 值分配给 DATETIME 变量时,该值发生意外舍入。

示例 SQL :

DECLARE @DT DATETIME
DECLARE @DT2 DATETIME2

SET @DT2='2015-07-23 18:35:34.8815038'
SELECT @DT=@DT2

SELECT @DT2 AS [DATETIME2],@DT AS [DATETIME]

输出:

DATETIME2                             DATETIME
------------------------------------------------------------        
2015-07-23 18:35:34.8815038    |     2015-07-23 18:35:34.883

现在,我找不到 8815038 纳秒四舍五入为 883 毫秒的原因 [=26] =]881 或 882 毫秒。

如果有人知道对此的确切解释,请在这里分享。 :-)

原因是在 datetime 类型中,您只有 .000、.003 和 .007 秒的小数部分作为最小增量。

试试这个:

select cast('2015-01-01 00:00:00.882' as datetime)
select cast('2015-01-01 00:00:00.884' as datetime)

您会看到两者都四舍五入为 .883