/*
* tbl表BusDate字段的值都是yyyy-MM-dd 00:00:00格式
*/
-- 不能查出BusDate为‘2014-08-02 00:00:00’的数据
SELECT * FROM tbl
WHERE BusDate > '2014-08-01 23:59:59.999'
-- 可以查出BusDate为‘2014-08-02 00:00:00’的数据
SELECT * FROM tbl
WHERE BusDate > '2014-08-01 23:59:59.998'
/*
* 为什么?
*/
------解决方案--------------------
不要动不动就说BUG,去查询下文档,时间的精度
------解决方案--------------------
试了一下,确实有这个问题,但不能就此就确定是bug:
select *
from
(
select cast('2014-08-02 00:00:00' as datetime) d
)t
WHERE d > cast('2014-08-01 23:59:59.998' as datetime)
/*
2014-08-02 00:00:00.000
*/
select *
from
(
select cast('2014-08-02 00:00:00' as datetime) d
)t
WHERE d > cast('2014-08-01 23:59:59.999' as datetime)
------解决方案--------------------
通过进一步分析,发现如下,这就不难解释上述的问题了,显然这个不是bug:
select cast('2014-08-01 23:59:59.999' as datetime)
/*
2014-08-02 00:00:00.000
*/
select cast('2014-08-01 23:59:59.998' as datetime)
/*
2014-08-01 23:59:59.997
*/------解决方案--------------------
进过进一步测试,发现当毫秒是如下这些的时候,会有四舍五入:
989,990,901 都是 900
992,993,994 都是 993
995,996,997,998 都是997