首先,它可能没有实际用途,只是想知道如何/为何发生这种情况。
当我尝试将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 毫秒。
如果有任何机构知道对此的确切解释,请在此处分享。 : - )
答案 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