DB

[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

error: Content is protected !!