搜索查询中的空日期

时间:2011-03-08 19:55:29

标签: oracle

这是一个简单的问题,但我现在想不出怎么做。

我在搜索查询中有一个日期字段。查询不是动态的,或者这会更容易。我需要能够返回与输入日期匹配的记录,或者如果没有输入日期,那么它应该全部返回。

这就是我所拥有的,但它不起作用。当有标准或没有标准时,它不会返回任何行。

AND ( (table.dateField = p_dateField) 
   OR (table.dateField = table.dateField and table.dateField is null))

提前感谢。

经过一个小时的工作后,我想出了这个:

and (  
      ( p_dateField IS NOT NULL AND table.dateField = p_dateField)
         OR ( p_dateField IS NULL AND (table.dateField is null or (table.dateField is not null))
     )

它适用于我能够针对它进行的少数测试。如果有人能提出更好的方法,请做。

谢谢!

4 个答案:

答案 0 :(得分:4)

你试过了吗?

AND ( (table.dateField = p_dateField AND NOT(p_dateField is NULL)) OR p_dateField is NULL)

我假设p_dateField是Date参数

答案 1 :(得分:3)

只需写下你喜欢的地方:

where previous_conditions
  AND ((table.dateField = p_dateField) or (p_dateField is null))
  and other_conditions;

答案 2 :(得分:1)

怎么样:

AND table.dateField = NVL(pdateField, table.dateField)

假设table.dateField不包含空值。如果确实如此,那么也许:

AND NVL(table.dateField, SYSDATE+10000) = 
        NVL(pdateField, NVL(table.dateField, SYSDATE+10000)

假设SYSDATE + 10000是您数据中没有的值。

答案 3 :(得分:0)

我会尝试在OR部分使用NVL子句:

AND ( (table.dateField = p_dateField) 
      OR (NVL(p_datefield, to_date('01/01/1901','MM/DD/YYYY')) =
           to_date('01/01/1901,'MM/DD/YYYY')))