从DATETIME2到DATETIME的意外舍入

时间:2015-07-23 13:33:24

标签: sql-server-2008 sql-server-2008-r2 sql-server-2012

首先,它可能没有实际用途,只是想知道如何/为何发生这种情况。

当我尝试将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 毫秒与预期的 881 882 毫秒。

如果有任何机构知道对此的确切解释,请在此处分享。 : - )

1 个答案:

答案 0 :(得分:2)

原因是在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