SQL毫秒精度

4
我在SQL中将一个时间存储在DATETIME字段中,但是当我尝试删除小于该值的任何内容时,它实际上会删除该值。例如:
我在表中有一个值2015-06-24 16:32:42.243。 当我运行下面的查询时,即使该值不在其范围内,它也会删除该值。为什么?
DELETE FROM MyTable
WHERE  MyDate <= '2015-06-24 16:32:42.242' 

是否存在精度问题?


更多阅读:https://dev59.com/00vSa4cB1Zd3GeqPdEZx#2049656 - AHiggins
1个回答

6

传统的datetime数据类型中的值仅存储了大约1/300秒的精度。

有效毫秒结尾为037,其他任何数字都会四舍五入到最接近这些数字之一(537距离相等,会被四舍五入为7,这是唯一的2ms调整)。

因此,当隐式转换为datetime时,.242会被四舍五入为.243

如果您正在使用SQL Server 2008+,则可以使用datetime2(3)以获得完全的毫秒精度。

或者只需使用

DELETE FROM MyTable WHERE MyDate < '2015-06-24 16:32:42.243'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接