-1

我有一个名为ORDERcolumn的表cancel_date_time。我在用:

to_char(cancel_date_time,'YYYYMMDD HH24:MI:SS')
    not between ('20120214 10:00:00')
            and ('20120215 10:00:00') 

检索记录。cancel_date_time但是当is时它不返回任何记录吗NULL

任何人都可以建议检索记录的问题是什么?

4

2 回答 2

1

Null 不是一个值,因此它不能与其他值进行比较。

你可以使用这样的结构:

    ...
    where
      nvl (cancel_date_time, date_value_for_empty_cancel_date) 
      not between ('20120214 10:00:00') and ('20120215 10:00:00')

日期的字符串文字也是 NLS 依赖的,并且 to_char 可能会阻止使用索引。

于 2013-02-27T00:16:13.807 回答
1

如果您想要其中的行cancel_date_time以及不在两个日期之间NULL的任何行cancel_date_time

WHERE cancel_date_time NOT BETWEEN to_date( '20120214 10:00:00','YYYYMMDD HH24:MI:SS') 
                               AND to_date( '20120215 10:00:00','YYYYMMDD HH24:MI:SS')
   OR cancel_date_time IS NULL

您不想将函数应用于可能被索引的列。如果您想要日期比较语义,您希望将日期与日期进行比较。最后,由于NULLis 永远不会等于也永远不会不等于任何其他值,因此您需要显式检查IS NULL.

于 2013-02-27T00:16:52.127 回答