Пустой результат выбора при использовании дат - PullRequest
1 голос
/ 25 июня 2011

Исходные данные: имеют параграф запроса, который в целях аргументации может быть упрощен до следующего

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 приводит к пустому результирующему набору первых двух, когда условия работают не так, как должно, и возвращает ноль вместо 1. Если я просто заменю последнюю строку запроса на следующие

FROM dual;

первые две, когда условия работают безупречно.

Условие: Это должен быть только запрос, без ifs, var defs и т. Д.

Как можно выполнить этот тип выбора, но без нулевого значениявернулся?

PS: Можно использовать NVL / NVL2, но это действительно усложняет дело.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 июня 2011

СЛУЧАЙ, КОГДА работает нормально, ваша проблема с MAX.

MAX и MIN возвращают ноль, когда ни одна строка не совпадает, а SUM и COUNT возвращают 0.

Боюсь, что den-javamaniacправильно, вам нужен NVL или, возможно, умное использование DECODE, если вы не можете отключить MAX.

0 голосов
/ 25 июня 2011

Используйте функцию 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;
...