본문 바로가기
2.2 DB/ORACLE

[Oracle] null 처리 함수 (NVL, NVL2)

by Dohi._. 2024. 9. 26.
728x90

NVL 함수는 값이  Null인경우 지정값을 출력하고 Null이 아닌경우에는 원래의 값을 출력한다

NVL(Colum1, value)

Colum1 이 Null 일경우 value의 값이 들어간다.

                  Null이 아닐 경우는 Colum1의 값이 나온다

 

예시

nvl(to_date,trunc(sysdate)-1);

to_date컬럼중 null 이 있으면 어제날짜를 반환하고 값이 존재하면 그대로 반환한다.

 

 

nvl2함수는 nvl함수와 대부분 동일 하지만 값이 존재하는 경우에도 값을 지정한 값으로 반환하는 함수이다.

nvl2(colum,notnullValue,nullValue);

colum값이  null이 아닐떄는 notnullValue의 값 이 반환되고 

                   null일 경우에는 nullValue의 값이 반환된다.

 

예시

nvl2(차량번호,'Y','N') AS 차량보유

 

 

비슷한 함수로는 

DECODE가 있으나 해당 함수는 IF Else와 같은 분기함수입니다

DECODE(값, 비교1, 결과1, 비교2, 결과2, ..., 기본결과)

 

값과 비교n에 일치할경우 결과n을 반환하고 해당되는 비교값이 없을 경우

기본결과를 반환합니다!

 

 

위의 예제들을 반환을 하면 다음과 같습니다

nvl(to_date,trunc(sysdate)-1);
DECODE(to_date,NULL,trunc(sysdate)-1,to_date);
---
nvl2(차량번호,'Y','N') AS 차량보유;
DECODE(차량번호,NULL,'N','Y') AS 차량보유;

 

하지만 nvl함수보다 복잡하고 가독성이 좋지 않아 

해당 건으로 잘 사용하지는 않습니다!

 

 

 

해당 함수들은 Oracle에서만 사용이 가능한데 

 

공용적으로 대부분의 DBMS에서 사용이 가능한 ANSI 쿼리중 비슷한 함수를 가져왔습니다.

COALESCE 함수입니다

해당 함수는 Null일 경우 다음 인수로 넘어가서 null이 아닌 값이 나올때 그값을 반환합니다.

 

COALESCE(ex1, ex2, ex3);

ex1이 Null이 아닐경우 ex1 반환

ex1이 Null이면서 ex2가 Null이 아닐경우 ex2반환

ex1과 ex2이 Null이면서 ex3가 Null이 아닐경우 ex3반환하는 함수입니다.

 

 

 

Nvl과 비슷하게 사용하면 다음과 같습니다

nvl(to_date,trunc(sysdate)-1);
COALESCE(to_date,trunc(sysdate)-1);

 

 

 

오늘은 null처리하는 방법을 알아보았습니다

 

Nvl, Nvl2를 중점으로 알아보았고

비슷한 함수로 Decode, Coalesce함수를 확인해봤습니다

 

감사합니다

728x90

'2.2 DB > ORACLE' 카테고리의 다른 글

[Oracle] OUTER JOIN (+)  (0) 2024.10.04
[oracle] Union / Union ALL  (0) 2024.09.30
[Oracle/SQL] 날짜 마지막 시간 적용에 0.99999 쓰는 이유  (3) 2024.09.25
[ORACLE] 테이블 복제  (0) 2024.09.23
[Oracle/SQL] With 절  (0) 2024.07.30

댓글