我有一个名为ORDER
column的表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
?
任何人都可以建议检索记录的问题是什么?
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 可能会阻止使用索引。
如果您想要其中的行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
您不想将函数应用于可能被索引的列。如果您想要日期比较语义,您希望将日期与日期进行比较。最后,由于NULL
is 永远不会等于也永远不会不等于任何其他值,因此您需要显式检查IS NULL
.