Programming/Oracle SQL
[ Oracle ] null 함수 (nvl 함수), decode 함수
호IT
2021. 3. 15. 23:28
저번 글 테이블값과 이어집니다.
- nvl 예제
문제 : emp 테이블에서 sal * comm 값이 100000보다 작은 사원만
empno, ename,sal, comm, sal*comm 을 출력을 하세요.
comm 값이 null 값인 경우가 있다면, where 절을 어떻게써야할지 애매할 때가 있습니다.
select empno, ename, sal, comm, rpad(to_char(sal*comm,'999,999,999'),12) as 지급금액
from emp
where sal*nvl(comm,0) <1000000;
nvl(comm,0) 이 뜻하는 바는, comm 의 값이 null 이라면 0으로 치환한다는 의미입니다.
문제 : emp 에서 comm 값이 null 인 경우는 '해당 없음' 으로,
아니라면 원래 값이 출력되도록 empno, ename,sal, comm 을 출력하세요.
select empno, ename, sal, lpad(nvl(to_char(comm),'해당 없음'),10)
from emp;
to_char 를 이용해서 comm 을 문자형으로 바꿔야 에러가 나지 않습니다.
- decode 함수
위 예제를 decode 함수를 이용해서 풀 수도 있습니다.
select empno, ename, sal,
decode(comm,null,'해당없음')
from emp;
decode 함수를 사용하면, 굳이 형변환을 하지 않아도 '해당 없음' 을 출력해낼 수 있습니다.
decode 함수는 다른 프로그래밍 언어의 삼항연산자와 비슷합니다.
decode(comm,null,'해당없음') 의 의미는 아래와 같습니다.
comm 의 값이 널이면 '해당 없음' 입니다.