본문으로 바로가기

[Oracle] 조건에 따른 값변경(DECODE)

category DB\SQL 2019. 8. 7. 10:26

조회된 결과에 따라 값을 변경할떄 , CASE 문을 사용하지않고 DECODE를 사용 할 수 있다.

 

DECODE 함수는 오라클에서만 지원이 된다.

 

if... else if... else 와 비슷한 맥락이다.


DECODE( 조회값, 비교값1, 결과값1, 비교값2, 결과값2, 그외값 )


첫번째 매개변수는 조회값이고, 그뒤로 짝수번째 변수는 비교값, 홀수번째변수는 바로앞변수가 조회값과 같을경우 반환하는 값이다.

 

전체 변수의 개수가 짝수이면 else 에 해당하는 그외값이 있고, 홀수면 없다고 볼수있다.

 

 

매개변수의 개수에따라 비교하는 횟수가 늘어난다

 

예를들어

DECODE( 조회값, 비교값1, 결과값1, 그외값) 이경우 조회값과 비교값1 이 같을경우 결과값1, 그외에는 그외값을 반환한다.

 

DECODE( 조회값, 비교값1, 결과값1, 비교값2, 결과값2) 이경우 조회값과 비교값1 이 같을경우 결과값1, 다를경우 비교값2와 비교한뒤 같을경우 결과값2를 반환한다. 그외에는 그외값에 해당하는 매개변수가 없으므로 NULL 을 반환한다.

 

 

조회된 결과와 비교값이 참인경우, 거짓인경우 각각 설정한 값으로 리턴받을 수 있다.

SELECT DECODE('A', 'A', 1, -1) AS "DECODE" FROM DUAL
-- 1

SELECT DECODE('B', 'A', 1, -1) AS "DECODE" FROM DUAL
-- -1

SELECT DECODE('C', 'A', 1, -1) AS "DECODE" FROM DUAL
-- -1

SELECT DECODE('A','A',1,'B',2) FROM DUAL
-- 1

SELECT DECODE('B','A',1,'B',2) FROM DUAL
-- 2

SELECT DECODE('C','A',1,'B',2) FROM DUAL
-- null

SELECT DECODE('C','A',1,'B',2,-1) FROM DUAL
-- -1