
SQL에서 조건에 따라 다른 값을 보여줘야 할 때
보통은 CASE WHEN을 쓰는데,
Oracle에서는 그보다 더 간단하게 사용할 수 있는 DECODE 함수가 있다.
DECODE는 특정 값과 비교해서 일치하는 조건에 따라
결과를 다르게 반환해주는 함수로,
단순한 조건 분기에서는 CASE보다 훨씬 간단하게 쓸 수 있다.
이번 글에서는 DECODE 함수의 문법, 특징, 예시까지 한 번에 정리해봤다.
1) DECODE
1-1) 문법
DECODE(expr, search1, result1 [, search2, result2, ...] [, default])
1-2) 특징
- expr 값이 search 값과 일치하면 해당 result 값을 반환한다
- 일치하는 값이 없을 경우 마지막 default 값을 반환한다 (생략 시 NULL 반환)
- 단순한 조건 분기에 적합하고,
CASE WHEN보다 더 간단하게 작성할 수 있다 - NULL 값은 비교가 불가능하다는 점에 주의해야 한다 (NULL = NULL은 false)
1-3) 예시
SELECT
DECODE('A', 'A', 'Apple', 'B', 'Banana', 'Nothing') AS result1,
DECODE(2, 1, 'One', 2, 'Two', 3, 'Three') AS result2,
DECODE(NULL, NULL, 'Match', 'No Match') AS result3,
DECODE(100, 50, 'Half', 100, 'Full') AS result4
FROM dual;
result1: 'A'와 일치하는 값이 있으므로 'Apple'result2: 2와 일치 → 'Two'result3: NULL은 NULL과 비교해도 false → 'No Match'result4: 100과 일치 → 'Full'
결과값

1-4) 예시2
: NULL 처리를 위한 NVL 함수와 함께 활용
SELECT
DECODE(NVL(dept_cd, 'X'),
'A1', '총무부',
'B1', '기획부',
'X', '미정',
'기타') AS dept_name
FROM dual;
- dept_cd가 NULL이면 → 'X'로 치환
- 이후 일반 DECODE 로직을 수행
- NULL을 DECODE 안에서 직접 비교할 수 없기 때문에 NVL과 함께 쓰는 방식
💡 참고
DECODE는 값을 비교해서 분기 처리할 때 쓰기 좋고,CASE보다 간단하다- 조건이 많거나 복잡하면
CASE WHEN이 더 읽기 쉽고 명확함 - NULL은 반드시 따로 처리해줘야 한다
(ex.NVL로 대체하거나IS NULL로 조건 분리)
'DataBase > Oracle' 카테고리의 다른 글
| [Oracle] 순위 함수(DENSE_RANK, RANK 함수) (0) | 2025.07.17 |
|---|---|
| [Oracle] CASE WHEN – 조건 분기 처리 (0) | 2025.07.03 |
| [Oracle] 정규표현식(REGEXP) 자주 사용하는 패턴 4가지 (0) | 2025.06.30 |
| [Oracle] 정규표현식 함수 정리(REGEXP_COUNT, REGEXP_SUBSTR, REGEXP_REPLACE) (0) | 2025.06.26 |
| [Oracle] EXISTS, NOT EXISTS 함수 사용법과 예시 (0) | 2025.06.13 |