Oracle NVL, DECODE 함수
Oracle NVL, DECODE 함수
▫ NVL()
▪ 정의
NVL(string1, replace_with) |
- string1 : null값을 포함할 수 있는 값이나 표현식.
- replace_with : nll값을 전환시 사용할 값.
▪ 특징
- NULL 값을 다른 값으로 바꿀 때 사용.
- 모든 데이터 타입에 적용 가능. 단, 전환되는 값의 데이터 타입을 일치시켜야 함;
- row 가 없는 값에 대해서도 값을 얻고 싶을 경우에는 숫자관련 함수와 같이 사용.
Ex> select nvl(max(sal), 0) from emp where type=’Z’;
▪ 예제
// desc emp; |
// select * from emp; |
/* type이 null이면 ‘D’로 바꾸어 출력. */ select nvl(type, 'D'), name, sal, logday from emp; |
/* sal이 null이면 ‘20000’으로 바꾸어 출력. */ select type, name, nvl(sal,20000), logday from emp; |
/* logday가 null이면 to_date(’11-12-2010’, ‘DD-MM-YYYY’)로 바꾸어 출력. */ select type, name, sal, nvl(logday, to_date('11-12-2010', 'DD-MM-YYYY')) from emp; |
▫ DECODE()
▪ 정의
DECODE({column | expression}, search1, result1 [, search2, result2] ... [, default]) |
- column | expression : 조건을 수행해야 할 컬럼 혹은 표현식.
- search : 조건.
- result : 해당 조건이 참일 경우 수행하는 부분.
- default : else에 해당할 경우 수행하는 부분.
▪ 특징
- 특정 컬럼의 값을 기준으로 마치 switch case문을 사용하는 것과 같은 효과를 내는 함수.
- 해당 컬럼의 값이 ‘A’이면 지정한 특정한 값을 출력하교, ‘B’이면 또 다른 값을 출력.
- 기본값을 정해서 조건을 만족하지 않는 경우의 출력 제어 가능.
▪ 예제
/* type에 따라 직업명 출력(A:개발,B:기획,C:디자인, default:인사) */ select type, name, sal, logday, decode(type, 'A', '개발', 'B', '기획', 'C', '디자인', ‘인사’) as job from emp; |
/* type별 count 하기. */ select count(decode(type, 'A', name)) as A_cnt, count(decode(type, 'B', name)) as B_cnt, count(decode(type, 'C', name)) as C_cnt, count(decode(type, '', name)) as default_cnt from emp; |
/* type에 따른 인상급여 출력. */ select type, name, sal, decode(type, 'A', sal*2, 'B', sal*1.05, 'C', sal*1.1, sal*1.15) as newsal from emp; |
▫ 참고 자료
- http://yagi815.tistory.com/467
- http://luckys.tistory.com/35