본문 바로가기
SQL/ORACLE

[ORACLE] NULL 값 치환 NVL, NVL2 함수 - 그룹핑 예제 포함!

by ssollacc 2022. 1. 9.
728x90


오라클에서 쿼리문 작성 중 SUM이나 AVG 등으로 그룹핑을 하는데, 데이터가 NULL값이면 데이터가 뽑히지 않는다!
근데 나는 0 이나 '' 라도 뽑고싶다!
그럴 때 NVL, NVL2 함수를 사용하면 된다.

사용법은 간단!

NVL(컬럼, NULL일때 반환 값)

이렇게 감싸주면 된다.

- 예제 -

NVL(컬럼,0) -- 컬럼의 값이 NULL일경우 0으로 치환
NVL(컬럼,'') -- 컬럼의 값이 NULL일경우 ''으로 치환
NVL(컬럼,SYSDATE) --컬럼의 값이 NULL일경우 현재날짜로 치환


그리고 SUM 이나 AVG 등으로 그룹핑을 할 때는

NVL(SUM(컬럼), 0) -- SUM한 컬럼의 값이 NULL일경우 0으로 치환
NVL(SUM(컬럼), ’’) -- SUM한 컬럼의 값이 NULL일경우 ''으로 치환
NVL(SUM(컬럼), SYSDATE)) -- SUM한 컬럼의 값이 NULL일경우 현재날짜로 치환

이렇게 감싸주면 된다!

NVL2함수는 NVL함수에 DECODE함수를 합친 것이라고 보면 쉽다.

사용법도 간단하다

NVL2(컬럼, NULL이 아닐 경우 반환 값, NULL일 경우 반환 값)

간단하게 예를 들면

SELECT NVL2(USER_ID, 'Y','N') -- #{userId}가 있으면 Y를 반환, 없으면 N을 반환 FROM SYS_USER WHERE USER_Id = #{userId};

 

** 참고 **
NVL, NVL2 함수는 사용하기도 쉽기 활용하기도 좋지만 오라클에서만 제공하는 함수이다보니..
다른 DB(MY_SQL이나 MS_SQL 등)와 호환을 해야한다면 안쓰는 게 좋을지도!

 

728x90

댓글