CASE 는 위에서부터 맞는 것을 찾아 멈춘다. 그래서 넓은 조건을 위에 두면 아래가 영영 걸리지 않는다.
왜 그런지까지
CASE WHEN 조건 THEN 값 ... ELSE 값 END 꼴로 쓴다.
조건을 위에서부터 차례로 보다가 처음 맞는 것에서 멈추므로 순서가 곧 답이 된다. ELSE 를 빼면 아무 조건에도 안 걸린 행은 NULL 이 된다. DECODE 는 오라클 전용으로 '같으냐'만 따질 수 있고, 범위 비교는 못 한다.
조건 순서를 뒤집으면 결과가 달라진다
CASE vs DECODE
CASE 는 범위 비교(>=, BETWEEN)까지 되는 표준 문법이고, DECODE 는 오라클 전용으로 '같으냐'만 따진다.
ELSE 가 없을 때
어느 조건에도 걸리지 않은 행은 NULL 이 된다. 0 이나 빈 문자열이 아니다.
넣어 두면 오늘 · 1일 · 3일 · 7일 · 14일 · 30일 간격으로 다시 물어봅니다