DateTime毫秒添加异常:转换结果被舍入是否正常?
SQL DateTime添加毫秒后舍入问题解答
这种情况是正常的,根源在于SQL Server的datetime类型本身不支持精确到毫秒:它的时间精度约为3.33毫秒,时间部分的毫秒值只能是000、333、667这几种固定结尾,任何其他毫秒值都会被自动舍入到最近的有效数值。
举个例子:
- 尝试添加1毫秒到
datetime值,结果会被舍入到000或333结尾 - 添加2毫秒同理,只有添加3毫秒才会得到333结尾的时间
你的SQL语句:
CONVERT(varchar(125), dateadd(millisecond,ms,datetime), 21) as ZDateTimeMs
这里的舍入问题和DATEADD、CONVERT函数无关,完全是datetime类型的精度限制导致的。
如果需要精确存储毫秒级时间,建议替换为datetime2类型,它支持最高100纳秒的精度,可以精确存储任意毫秒值,不会出现舍入情况。
内容的提问来源于stack exchange,提问作者user3015739
相关产品推荐
相关产品推荐

