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
'SQL > ORACLE' 카테고리의 다른 글
[ORACLE] 오라클 regexp_replace 정규표현식 - 전화번호, Email 마스킹 예제 (0) | 2023.08.03 |
---|---|
[Oracle] 다중 INSERT - 여러 행 한번에 넣기 (0) | 2022.01.15 |
[Oracle] 오라클에서 데이터 타입 number VS integer VS int 차이 (0) | 2021.08.31 |
댓글