WITH VIEW_TMP AS
(
SELECT NULL AS V1 FROM dual
)
SELECT CASE WHEN V1 = NULL THEN 'NULL입니다' END AS T1
, CASE WHEN V1 IS NULL THEN 'NULL입니다' END AS T2
, CASE V1 WHEN NULL THEN 'NULL입니다' END AS T3
-- , CASE V1 WHEN IS NULL THEN 'NULL입니다' END AS T4 문법 오류
, DECODE(V1, NULL, 'NULL입니다') AS T5
-- , DECODE(V1, IS NULL, 'NULL입니다') AS T6 문법 오류
FROM VIEW_TMP
UNION ALL
SELECT CASE WHEN V1 != NULL THEN 'NULL아닙니다' END AS T1
, CASE WHEN V1 IS NOT NULL THEN 'NULL아닙니다' END AS T2
, CASE V1 WHEN /*NOT*/ NULL THEN 'NULL아닙니다' END AS T3 --문법 오류
-- , CASE V1 WHEN IS NULL THEN 'NULL아닙니다' END AS T4 문법 오류
, DECODE(V1,/*NOT*/ NULL, 'NULL입니다') AS T5 --문법 오류
-- , DECODE(V1, IS NULL, 'NULL아닙니다') AS T6 문법 오류
FROM VIEW_TMP;
CASE WHEN 과 DECODE 가 NULL 다루는 방법이 다르다.
CASE WHEN은 키워드를 통한 NULL처리가 아닌 연산자를 통한 연산 시 흔히 생각하는 값이 안나온다.
CASE WHEN에서 NULL을 다룰 때는 무조건 키워드로 다뤄야 한다는 것만 기억하면 된다.
통계 쿼리를 낼 때 NULL을 다루다 위를 차이점을 모르면 전혀 다른 결과를 낼 수 있기 때문에 주의해야한다.
'개발 > 오라클 SQL' 카테고리의 다른 글
UNION ALL, UNION (0) | 2022.12.28 |
---|---|
ORDER BY 다루기 (0) | 2022.12.26 |
오라클 비밀번호 만료 (0) | 2022.11.27 |
문자열 다루기 핵심 TRANSLATE (1) | 2022.11.25 |
IN, NOT IN, EXISTS, NOT EXISTS (0) | 2022.11.10 |