SQL/ORACLE
[ORACLE] NULL 값 치환 NVL, NVL2 함수 - 그룹핑 예제 포함!
ssollacc
2022. 1. 9. 19:53
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