본문 바로가기

데이터베이스

[SQLP] 'DECODE' 의 모든 것

DECODE 함수는 오라클 쿼리에서 가장 많이 사용하는 함수 중 하나이다.

DECODE 함수는 프로그래밍에서의  if else 와 비슷한 기능을 수행한다. 간단한 사용방법은 아래와 같다.

 

아래와 같이 두가지 방법으로 사용이 가능하다.

1. DECODE(컬럼,조건,TRUE 결과값,FALSE 결과값)

2. DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3..........) 

 

예시) 

WITH TEMP AS (

SELECT 'M' GENDER FROM DUAL UNION ALL SELECT 'F' GENDER FROM DUAL UNION ALL SELECT 'X' GENDER FROM DUAL ) SELECT GENDER , DECODE(GENDER, 'M', '남자', 'F', '여자', '기타') GENDER2 FROM TEMP

 

SELECT GENDER , DECODE(GENDER, 'M', '남자', 'F', '여자', '기타') GENDER2 FROM TEMP

 

 

특징) 

ELSE 부분은 생략이 가능하다. 해당 조건이 없으면 NULL 

SELECT GENDER, DECODE(HOBBY, '롤', '준우', '카트라이더', '준우') CUSTOMS

FROM TEMP

HOBBY 가 롤이면 준우, 카트라이더면 준우를 출력하고 이외의 경우 (즉, ELSE일 경우) 는 NULL 을 출력한다.

 

NVL2 함수처럼 NULL 을 체크할 수 있음

SELECT CUST_NO, CUST_NM, DECODE(CUST_NO, NULL, 'N', 'Y')

이렇게 쓸 수 있음.

이 방법은 DECODE(COLUMN,'조건',같을때,다를때) 이고, 

다른 형식은 DECODE(HOBBY, '롤', '준우', '카트라이더', '준우') 이거임 

 

DECODE 함수 내부에 또 다른 DECODE 함수를 사용할 수 있음

그런데 퍼포먼스에 좋지 않다고 했음 → CASE WHEN 사용할 것.

 

GROUP BY 로 칼럼을 묶고 DECODE를 사용할 때 조건 대상과 타입은 항상 같아야 한다.

 

집계와 이중으로 사용이 가능하다.

예시)

우  (세로버전)

(가로버전)

천 준 우 와 같이 출력할 때,

 

SELECT MAX(DECODE(ROWNUM,A.TT 

FROM

(SELECT TRIM(SUBSTR('천준우',LEVEL,1)) TT 

FROM DUAL

CONNECT BY LEVEL <= 3) A

 

아 까먹음 .. 내일 해보기 

 

 

 

 

 

 

 

 

'데이터베이스' 카테고리의 다른 글

[SQL] ROW_NUMBER() RANK() DENSE_RANK()  (0) 2021.02.13
[SQL] 1주차 숙제  (0) 2021.02.05
[SQLP] DML 실행 순서  (0) 2020.06.20
[PL/SQL] 모듈 (Stored Block)  (0) 2019.06.21
[PL/SQL] SELECT & CURSOR  (0) 2019.06.20