sql - Oracle 11.2.0.2.0 中的日期比较问题

标签 sql oracle oracle11g

我遇到了 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/

相关文章:

php - 如何在 Laravel 中对多个字段进行计数分组

mysql - upsert 后删除未更新的行

sql - 在 SQL : add a column based on before or after date? 中

java - SQL - java中的转义字符

oracle - 在 oracle 中格式化(或提供字符串)异常消息

sql - 我如何通过纯 sql 执行此查询?

php - mysql_num_rows() 在使用 AND 时返回 0

sql - 如何限制 Ingres 中任意查询的结果集大小?

java - 通过连接防止 Oracle 数据库错误

oracle - 如何查看并终止对 ORACLE 模式进行的 session 列表?