[Oracle] COALESCE 함수 사용법 (NVL 여러개)

오라클에서 NULL 값을 치환할 때는 NVL, NVL2, COALESCE 함수를 사용한다. COALESCE 함수는 NVL 함수의 기능이 조금 더 확장된 함수라고 생각하면 된다. NVL 함수와 동일하게 사용할 수도 있지만, 여러 개의 칼럼의 NULL 값을 판별해야 할 경우 NULL이 아닌 첫 번째 칼럼의 값을 반환할 때 유용하게 사용할 수 있다.

 

오라클 COALESCE 함수

 

COALESCE(exp1, exp2, exp3, exp4 ...) 와 같이 함수의 인자의 개수는 동적으로 입력할 수 있다.

 

기본 사용법

WITH customers AS (
  SELECT 1 AS c_id, 'Tammy Bryant' AS c_name, '010-1234-5678' AS tel_no1, '02-345-6789' AS tel_no2, NULL AS tel_no3 FROM dual UNION ALL
  SELECT 2 AS c_id, 'Roy White'    AS c_name, NULL AS tel_no1, '031-1234-8765' AS tel_no2, '070-4518-0987' AS tel_no3 FROM dual UNION ALL
  SELECT 3 AS c_id, 'Gary Jenkins' AS c_name, '010-0987-6543' AS tel_no1, NULL AS tel_no2, NULL AS tel_no3 FROM dual
)

SELECT c_id
     , c_name
     , tel_no1
     , tel_no2
     , tel_no3
     , COALESCE(tel_no1, tel_no2, tel_no3) AS coalesce_tel_no
  FROM customers

 

 

COALESCE 함수에 입력된 인자 중에서 NULL이 아닌 첫 번째 칼럼의 값을 반환한다.

 

NVL 함수와 동일하게 사용 가능

SELECT c_id
     , c_name
     , tel_no1
     , NVL(tel_no1, 'XXX-XXXX-XXXX') AS nvl_tel_no
     , COALESCE(tel_no1, 'XXX-XXXX-XXXX') AS coalesce_tel_no
  FROM customers

 

 

COALESCE 함수에 2개의 인자만 입력하면 NVL 함수와 동일한 결과를 반환한다.

2개의 인자만 입력한다면 NVL 함수를 사용하는 것이 가독성이 좋을 듯하다.

 

NVL 함수를 중첩으로 사용해야 할 경우 대체

SELECT c_id
     , c_name
     , NVL(tel_no1, NVL(tel_no2, tel_no3)) AS nvl_tel_no
     , COALESCE(tel_no1, tel_no2, tel_no3) AS coalesce_tel_no
  FROM customers

 

 

여러 개의 칼럼의 값 중에서 NULL이 아닌 값을 반환하기 위해서 NVL 함수를 중첩으로 사용해야 할 경우가 있다. 이럴 때는 COALESCE 함수를 사용하면 쿼리문을 간소화하고 가독성을 높일 수 있다.

 

 

[Oracle] 오라클 NVL, NVL2 함수 사용법

오라클 NVL, NVL2 함수 사용법 해당 칼럼의 값이 NULL 값인 경우 특정값으로 출력하고 싶으면 NVL 함수를 사용하고, NULL 값이 아닐 경우 특정값으로 출력하고 싶으면 NVL2 함수를 사용하면 된다. NVL 함

gent.tistory.com

예제쿼리(테이블포함).txt
0.00MB

 

댓글

Designed by JB FACTORY