我遇到了 Oracle DBMS 的奇怪行为。 下面引用的 SQL 结果集为空。如果我删除“this_.order_date >=”条件中的任何一个 - 它会返回预期的 2 行。
SELECT DISTINCT this_.id AS y0_,
this_.order_date AS y1_
FROM flight_trip_orders this_,
int_work_order_info iwoi1_,
state_history_records cs2_
WHERE this_.work_info_id =iwoi1_.id
AND iwoi1_.state_history_records_id=cs2_.id
AND this_.order_date <=to_timestamp('12/16/2011', 'mm/dd/yyyy')
AND this_.order_date >=to_timestamp('12/13/2011', 'mm/dd/yyyy')
AND this_.order_date >=to_timestamp('12/15/2011', 'mm/dd/yyyy')
AND rownum <=2;
这怎么可能发生?两个不同的Oracle实例上查询结果不同,但版本都是11.2.0.2.0
请不要建议优化查询和删除条件 - 查询已生成,我无权更改它。
编辑: 添加提示“ALL_ROWS”有助于解决该问题。问题是我无法在实际应用中添加此提示,如上所述。
最佳答案
如果您对问题的描述准确,那么听起来这可能是优化器错误。也许冗余条件处理不当,导致使用了不正确的过滤器。我要做的第一件事是查看完整查询和不带“12/13/2011”条件的查询的执行计划,并查找差异,特别是在所应用的谓词中。
关于sql - Oracle 11.2.0.2.0 中的日期比较问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520814/