我将时间存储在SQL的DATETIME字段中,但当我尝试删除任何小于该值的内容时,它实际上是在删除该值。例如:
我在一个表中有一个值2015-06-24 16:32:42。243当我运行下面的查询时,它会删除该值,即使它不在它的范围内。为什么?
DELETE FROM MyTable
WHERE MyDate <= '2015-06-24 16:32:42.242'
是否存在精度问题?
传统datetime
数据类型中的值仅以大约1/300秒的精度存储。
有效的ms结尾是0
、3
、7
,任何其他的都将四舍五入到这些结尾中最接近的一个(5
在3
和7
之间等距,并四舍五进到7
,这是唯一的2ms调整)。
因此,当隐式转换为datetime
时,.242
四舍五入为.243
如果您使用的是SQL Server 2008+,则可以使用datetime2(3)
来获得全毫秒精度。
或者只使用
DELETE FROM MyTable WHERE MyDate < '2015-06-24 16:32:42.243'