这是一个简单的问题,但我现在想不出怎么做。
我在搜索查询中有一个日期字段。查询不是动态的,或者这会更容易。我需要能够返回与输入日期匹配的记录,或者如果没有输入日期,那么它应该全部返回。
这就是我所拥有的,但它不起作用。当有标准或没有标准时,它不会返回任何行。
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))
)
它适用于我能够针对它进行的少数测试。如果有人能提出更好的方法,请做。
谢谢!
答案 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')))