SQL查询使用oracle 10g数据库日期时间等于不起作用

问题描述:

我有这样的SQL查询。SQL查询使用oracle 10g数据库日期时间等于不起作用

select * 
from TABLE_A 
where LogDateTime >= startdatetime and LogDateTime <= enddatetime; 

但是,enddatetime等于某些原因不起作用。我有记录日期11/23/09 8:50:09。当我选择enddatetime作为11/23/09 8:50:09它不会返回此记录。它回到8点49分。可能是什么问题呢?为什么时间戳不起作用?请告诉我。

谢谢。

什么数据类型enddatetime是什么?如果它是一个时间戳,那么您传递的变量的类型(DateTime)与表中数据的类型(Timestamp)之间可能会有不匹配,这可能会导致此错误,因为可能没有完全匹配的时间戳日期时间值...和最接近的可用值可能会在导致记录被过滤掉的方向上“关闭”。

是TIMESTAMP数据类型的LogDateTime吗?它存储秒的小数部分。可能你的日期不是 11/23/09 8:50:09。
尝试使用TO_CHAR(LogDateTime,'MM/DD/YYYY HH24:MI:SS.FF')输出日期以查看是否属于这种情况。

+0

是的,它是TIMESTAMP(6)。 – nav100 2009-11-23 15:22:21

+0

然后你需要一些舍入,就像在Andomar的建议中一样。 – 2009-11-23 15:55:22

+0

经过思考,我得出结论,你可能根本不需要四舍五入。你的查询是正确的,你知道日期不相等,所以实际上它不是一个问题。 – 2009-11-23 18:19:34

Oracle可能以更高精度存储日期时间,如8:49:59.200。这比8:49:59大,但它会显示相同。

试试这个WHERE子句:

LogDateTime < (enddatetime + INTERVAL '1' SECOND) 

这仍然将包括任何其第二个具有同一起跑线的enddatetime。

+0

它看起来像这个条款正在工作。但它会导致任何问题吗?因为我们添加了第二个权利? – nav100 2009-11-23 15:20:28

+0

@ nav100:通过添加第二个并将' Andomar 2009-11-23 15:35:47