본문 바로가기
프로그래밍/Database & SQL

[Oracle | 오라클] 단일행 함수 - 5. 기타함수

by 불타는홍당무 2015. 8. 17.

※ 이 글은 오지영 강사님의 <업무에 바로 쓰는 SQL 활용실습>의 강의내용을 바탕으로 작성하였습니다.


 

1. null값을 다른값으로 변경해 주는 함수

 

NVL(비교대상, null일 때의 값)

 

SELECT ename, sal, comm, NVL( comm, -7) 

FROM emp;


SELECT ename, sal, comm, sal+comm 

FROM emp;


SELECT ename, sal, comm, sal+NVL(comm, 0) 

FROM emp;

 

 비교대상과 null일 때의 값이 동일한 데이터타입이어야 한다.

SELECT ename, comm, NVL(comm, ‘미정’) 

FROM emp; --에러


SELECT ename, comm, NVL(to_char(comm), ‘미정’) 

FROM emp;

 

NVL2(비교대상, null이 아닐 때의 값, null일 때의 값)

 

SELECT ename, comm , NVL2( comm, comm+ 500, 100)

FROM emp ;

 

NULLIF( 비교대상, 비교값) | 비교대상=비교값인경우 null로 변환

 

SELECT ename, deptno, NULLIF(deptno, 30)

FROM   emp ;

 


2. CASE

 

SELECT에서 조건을 지정할 수 있는 함수

 

형식

SELECT 컬럼명1, 컬럼명2

CASE   when 조건식1 then 처리1

         when 조건식2 then 처리2

           .

.

.          

when 조건식N then 처리N

        else 기타처리

END

FROM 테이블명;

 

SELECT ename, deptno,

CASE

WHEN deptno=30 THEN 'A'

WHEN deptno=20 THEN 'B'

WHEN deptno=40 THEN 'C'

ELSE 'F'

END 팀정보

FROM emp;

 

 

3. DECODE

 

CASE문과 마찬가지로 SELECT에서 조건을 지정할 수 있는 함수


형식

DECODE(비교대상, 1, 처리1, 2, 처리2, … , N, 처리N, 기타처리)

 

SELECT ename, deptno, DECODE(deptno, 30, 'A', 20, 'B', 40, 'C', 'F') 팀정보

FROM emp;

 



연습문제

 

1.EMP사원 이름, 팀 조회하기(이름에 A문자 포함되어 있음 A, 없음 B팀으로)

 

1) CASE

SELECT ename,

CASE

WHEN ename LIKE '%A%' THEN 'A'

ELSE 'B'

END team

FROM emp;

 

2) DECODE

SELECT ename, DECODE(INSTR(ename, 'A',1,1),0,'B', 'A')

FROM emp;

 

2. emp사원 이름, 급여, 팀 조회하기(급여 2700 이상은 A팀 미만은 B

 

1) CASE

SELECT ename, sal,

CASE

WHEN sal >=2700 THEN 'A'

ELSE 'B'

END team

FROM emp;

 

2) DECODE + TRUNC

SELECT ename, sal,

DECODE(TRUNC(sal/2700),1, 'A', 'B') team

FROM emp;

 

3) DECODE + SIGN

SELECT ename, sal,

DECODE(sign(sal-2700),1, 'A', 0, 'A', 'B') team

FROM emp;