본문 바로가기

IT/DB

데이터베이스 SQL decode 함수 쓰는 방법

300x250

 

 

SQL에서 DECODE 함수는 조건에 따라 값을 변환하는 함수입니다.

 

이 함수는 기본적으로 값을 비교하여 조건에 맞는 값을 반환하는 방식으로 동작하며, 특정 DBMS(예: Oracle)에서 주로 사용됩니다.

 

DECODE 함수는 아래와 같은 형식을 따릅니다.

 

 

DECODE 함수 기본 구문:

 

DECODE(expression, search1, result1, search2, result2, ..., default_result)
 
  • expression: 비교할 값.
  • search1, search2, ...: 비교할 대상 값.
  • result1, result2, ...: 각 search 값과 expression이 일치할 때 반환할 결과.
  • default_result: expression과 일치하는 값이 없을 때 반환할 기본 값 (생략 가능).

 

사용 예시:

  1. 단순한 변환 예를 들어, 숫자 등급에 따라 등급명을 변환한다고 가정해봅시다.
SELECT 
employee_id, 
DECODE(grade, 1, 'Beginner', 2, 'Intermediate', 3, 'Advanced', 'Unknown') AS grade_name 
FROM employees;

 

  • grade 값이 1이면 'Beginner', 2이면 'Intermediate', 3이면 'Advanced'가 반환됩니다.
  • grade 값이 1, 2, 3이 아니면 'Unknown'이 반환됩니다.

 

 

2. 여러 조건 처리 DECODE 함수는 여러 조건을 처리할 수 있습니다.

 

예를 들어, 제품 상태에 따라 다른 메시지를 반환할 수 있습니다.

SELECT 
product_id, 
DECODE(status, 'A', 'Available', 'O', 'Out of stock', 'D', 'Discontinued', 'Unknown') AS status_desc
FROM products;
 
  • status 값이 'A'이면 'Available', 'O'이면 'Out of stock', 'D'이면 'Discontinued'가 반환됩니다.
  • 다른 값이 들어오면 'Unknown'이 반환됩니다.

 

3. 숫자 비교 DECODE를 사용하여 숫자를 비교할 수 있습니다.

 

예를 들어, 점수에 따라 성적을 변환할 때 사용할 수 있습니다.

SELECT 
student_id, 
DECODE(score, 90, 'A', 80, 'B', 70, 'C', 60, 'D', 'F') AS grade 
FROM students;
 
  • score가 90이면 'A', 80이면 'B', 70이면 'C', 60이면 'D', 그 외에는 'F'가 반환됩니다.

 

CASE 구문과 비교:

DECODE 함수는 매우 유용하지만, SQL 표준 함수는 아니며 주로 Oracle에서 많이 사용됩니다. CASE 구문은 SQL 표준이며 더 유연합니다. 예를 들어, 같은 기능을 CASE로 구현하면:

SELECT 
employee_id, 
CASE WHEN grade = 1 THEN 'Beginner' 
WHEN grade = 2 THEN 'Intermediate' 
WHEN grade = 3 THEN 'Advanced' 
ELSE 'Unknown' END AS grade_name
FROM employees;
 
 

DECODE와 CASE는 같은 기능을 제공하지만, CASE는 보다 복잡한 논리 조건도 처리할 수 있다는 점에서 더 강력합니다.

 

 

 

300x250