decode syntax
오라클 DECODE 사용법과 예제 oracle decode
2023. 11. 30. 18:21
Oracle DECODE함수
DECODE 함수는 조건부 로직을 구현하는 데 사용되며,
조건을 만족하는 경우에 따라 다른 값을 반환합니다.
syntax
DECODE(expr, search1, result1, search2, result2, ..., default)- expr: 비교할 대상. 컬럼이나 또다른 쿼리 함수 등이 될 수 있다.
- search1, search2, ...: 비교할 조건 값들
- result1, result2, ...: 조건 값에 대응하면 출력할 결과 값들.
- default: 모든 조건에 일치하지 않을 때 반환할 기본값
예제 1
SELECT employee_id, salary,
DECODE(salary,
5000, 'Low',
10000, 'Mid',
15000, 'High',
'Unknown') AS salary_category
FROM employees;위 예제에서는 employees 테이블의 각 직원의 급여에 대해 DECODE 함수를 사용하여 급여 범주를 지정하고 있습니다.
급여가 각각 5000, 10000, 15000인 경우에는 'Low', 'Mid', 'High'를 반환하고,
어떤 경우에도 일치하지 않으면 'Unknown'을 반환합니다.
예제 2 (다른 함수와 함께 사용)
SELECT employee_id, salary,
DECODE(SUBSTR(salary, 1, 1),
'5', 'Low',
'1', 'Mid',
'2', 'High',
'Unknown') AS salary_category
FROM employees;위 예제에서는 급여(`salary`)의 첫 번째 숫자를 추출하여 DECODE 함수를 사용하여 급여 범주를 지정합니다.
`SUBSTR(salary, 1, 1)`은 급여 문자열의 첫 번째 문자를 추출합니다.
이 값이 '5'이면 'Low', '1'이면 'Mid', '2'이면 'High', 그 외의 경우에는 'Unknown'을 반환합니다.
이렇게 함으로써 SUBSTR 함수를 DECODE 함수와 결합하여 복잡한 조건을 처리할 수 있습니다.
예제 3 (Where절에서 사용)
SELECT employee_id, first_name, last_name, job_id, salary
FROM employees
WHERE DECODE(job_id, 'MANAGER',
DECODE(salary >= 10000 AND salary < 12000, 1, 0), 0) = 1;이 예제에서는 먼저 `job_id`가 'MANAGER'인 경우에만 내부의 DECODE 함수가 실행되어 급여가 10000 이상이면서 12000 미만인 경우에 1을 반환하고 그 외의 경우에는 0을 반환합니다.
바깥쪽 DECODE 함수에서는 이 값을 비교하여 선택합니다.
사용법은 무궁무진하므로
상황에 맞추어 타 함수나 쿼리를 결합하여 사용하시면 됩니다.