[PostgreSql] 오라클 DECODE문이 postgresql에서는 어떻게 사용하는가?
오라클 decode문을 POSTGRESQL에서는 어떻게 사용할까? decode를 제공하지 않고 있다.
PostgreSQL에서는 CASE WHEN이 DECODE를 대체 가능하다. 문법만 조금 길어질 뿐 동작은 동일하게 처리할 수 있다.
Oracle DECODE → PostgreSQL 변환 방법
1. 기본 형태
Oracle
DECODE(expression, search1, result1, search2, result2, ..., default)
PostgreSQL
CASE
WHEN expression = search1 THEN result1
WHEN expression = search2 THEN result2
...
ELSE default
END
변환 예제
예제 1
Oracle
DECODE(status,
'Y', '정상',
'N', '비활성',
'알수없음')
PostgreSQL
CASE
WHEN status = 'Y' THEN '정상'
WHEN status = 'N' THEN '비활성'
ELSE '알수없음'
END
예제 2 (숫자 비교)
Oracle
DECODE(score,
90, 'A',
80, 'B',
70, 'C',
'F')
PostgreSQL
CASE
WHEN score = 90 THEN 'A'
WHEN score = 80 THEN 'B'
WHEN score = 70 THEN 'C'
ELSE 'F'
END
2. NULL 비교
Oracle DECODE는 NULL도 값으로 비교 가능하지만
PostgreSQL에서 NULL = NULL 은 항상 false라서 주의해야 해.
Oracle
DECODE(col, NULL, '값없음', '값있음')
PostgreSQL (주의!!)
CASE
WHEN col IS NULL THEN '값없음'
ELSE '값있음'
END
3. 단순한 매핑은 PostgreSQL에서도 비슷하게 CASE로 처리
Oracle
DECODE(type, 1, '남', 2, '여', '기타')
PostgreSQL
CASE type
WHEN 1 THEN '남'
WHEN 2 THEN '여'
ELSE '기타'
END

