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

+ Recent posts