使用日期时清空选择结果

时间:2011-06-25 08:17:52

标签: plsql oracle10g resultset

初始数据:有一段查询,为了推理可以简化到下一个

SELECT MAX((CASE 
          WHEN to_char(sysdate, 'DY') = 'SAT' THEN 1 
          WHEN to_char(sysdate, 'DY') = 'SUN' THEN 1
          ELSE 0 END)) status 
FROM mytable WHERE mycondition;

问题:看来,如果mycondition在条件不能正常工作时导致结果集为空,则返回null而不是1.如果我只是替换最后一行查询下一个

FROM dual;
当条件完美无缺时,前两个。

条件:它应该只是一个查询,没有ifs,var defs等。

如何执行此类型的select但没有返回null值?

P.S。:可以使用NVL / NVL2,但这确实让事情变得复杂。

提前致谢。

2 个答案:

答案 0 :(得分:0)

使用NVL功能:

SELECT NVL(MAX((CASE 
          WHEN to_char(sysdate, 'DY') = 'SAT' THEN 1 
          WHEN to_char(sysdate, 'DY') = 'SUN' THEN 1
          ELSE 0 END)), 1) status 
FROM mytable WHERE mycondition;

答案 1 :(得分:0)

案例当工作正常时,你的问题在于MAX。

当没有行匹配时,MAX和MIN返回null,而SUM和COUNT返回0。

我担心den-javamaniac是对的,你需要NVL,或者如果你不能切换MAX,可能会巧妙地使用DECODE。