我在SQL Server 2005中使用日期时间字段遇到了一个奇怪的错误.日期时间字段显示毫秒级精度,但看起来并不总是使用毫秒.这是我的测试查询:
SELECT col1, YEAR(col1) AS yr, MONTH(col1) AS mn, DAY(col1) AS dy
FROM mytable
WHERE col1 >= '2009-12-31 00:00:00.0' AND col1 <= '2009-12-31 23:59:59.999'
ORDER BY col1
Run Code Online (Sandbox Code Playgroud)
在我的结果中,我得到:
col1 | yr | mn | dy ----------------------------+------+----+---- 2009-12-31 00:00:00:00.000 | 2009 | 12 | 31 2010-01-01 00:00:00:00.000 | 2010 | 1 | 1
问题是我得到了2010-01-01的日期,即使它不应该小于或等于"2009-12-31 23:59:59.999".但是,如果我将查询更改为使用"2009-12-31 23:59:59.99 8 "它可以正常工作(不返回2010日期时间).
这是一个错误,还是这就是SQL Server的工作原理?如果这是它的工作原理,有什么理由吗?我遇到了从MySQL迁移的一些查询,这可以按预期工作(即使MySQL甚至不存储毫秒!).