我有一个名为ORDER
的表格,列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
为NULL
时,它是否未返回任何记录。
任何人都可以建议检索记录的问题是什么?
答案 0 :(得分: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可能会阻止使用索引。
答案 1 :(得分: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
您不希望将函数应用于可能被编入索引的列。如果您想要日期比较语义,您想要将日期与日期进行比较。最后,由于NULL
永远不等于且永远不等于任何其他值,因此您需要对IS NULL
进行明确检查。