oracle日期问题

时间:2013-02-27 00:02:34

标签: mysql sql oracle plsql

我有一个名为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_timeNULL时,它是否未返回任何记录。

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

2 个答案:

答案 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_timeNULL的行以及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进行明确检查。