相关疑难解决方法(0)

使用毫秒查询datetime字段会在SQL Server中产生错误的结果

我在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甚至不存储毫秒!).

sql datetime sql-server-2005

8
推荐指数
1
解决办法
4816
查看次数

标签 统计

datetime ×1

sql ×1

sql-server-2005 ×1