NVL
select last_name, NVL(commission_pct, 0) from employees;
# NVL(a, 0)는 a가 NULL이면 0으로 변환한다.
Bash
복사
select last_name, salary*12 + salary*12*nvl(commission_pct, 0) from employees;
# commission_pct가 null이면 0으로 계산
Bash
복사
select ename, sal, comm, sal+NVL(comm, 100) as R_SAL
from emp;
# 수령액은 월급 + 커미션이다. 커미션이 null 값이면 100을 적용
Bash
복사
select ename, NVL(TO_CHAR(comm), 'no comm')
from emp;
# comm이 null인 사원들은 no comm으로 출력
Bash
복사
select empno, ename, hiredate, sal, comm, nvl(sal+comm, SAL+100) as INCOME
from emp
where TO_CHAR(hiredate, 'YYYY-MM-DD') between '1981-01-01' and '1981-06-31'
order by hiredate;
# 1981년에 입사한 사원들의 정보 출력
Bash
복사
NVL2
select last_name, salary * 12 + salary * 12 * nvl2(commission_pct, commission_pct, 0)
from employees;
# 모든 사원의 연봉 계산
Bash
복사
select last_name, commission_pct, NVL2(commission_pct, 0, 1) from employees;
# NVL2(a, 0, 1)는 NULL이면 1로 변환 NULL이 아니면 0으로 변환
Bash
복사
select ename, NVL2(TO_CHAR(comm), CONCAT('commission is ', comm), 'no comm')
from emp;
# comm이 null이 아닌 값은 commission is <comm>으로 출력하고, null이면 no comm으로 출
Bash
복사
NULLIF
select NULLIF(1, 2) from dual;
# NULLIF는 두 값 같으면 NULL을 반환하고 같지 않으면 1을 반환
Bash
복사
NVL2 & NULLIF
select NVL2(NULLIF(1, 1), NULL, 1) from dual;
# NVL2와 NULLIF 같이 사용하면 이렇게 두 값이 같으면 1 같지 않으면 NULL
Bash
복사
select first_name, last_name,
NVL2(NULLIF(LENGTH(first_name),LENGTH(last_name)), null, LENGTH(last_name)) as RESULT
from employees;
# first_name과 last_name의 길이가 같으면 1 다르면 NULL로 나오고, 나온 값이 NULL이면 last_name의 길이로 변환하고, 나온 값이 1이면 NULL로 변환
Bash
복사
