decode syntax


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 함수에서는 이 값을 비교하여 선택합니다.

사용법은 무궁무진하므로
상황에 맞추어 타 함수나 쿼리를 결합하여 사용하시면 됩니다.

+ Recent posts