NVL

NVL

NVL 함수는 expr1이 NULL이면 expr2를 반환하고, 그렇지 않으면 expr1을 반환해요.

출처: NVL

본문

NVL 함수는 expr1이 NULL이면 expr2를 반환하고, 그렇지 않으면 expr1을 반환해요.

별칭 (Aliases): IFNULL

구문 (Syntax)

NVL( <expr1> , <expr2> )

인자 (Arguments)

  • expr1 — 일반 표현식이에요.
  • expr2 — 일반 표현식이에요.

사용 메모 (Usage notes)

  • Snowflake는 인자를 호환되도록 암시적으로 변환해요. 예를 들어 입력 표현식 중 하나가 숫자 타입이면 반환 타입도 숫자 타입이에요. 즉, SELECT NVL('17', 1);은 먼저 VARCHAR 값 '17'을 NUMBER 값 17로 변환한 다음 첫 번째 NULL이 아닌 값을 반환해요. 변환이 불가능하면 암시적 변환은 실패해요. 예를 들어 SELECT NVL('foo', 1);은 VARCHAR 값 'foo'를 NUMBER 값으로 변환할 수 없으므로 오류를 반환해요. 같은 타입의 인자를 전달하거나 필요하면 인자를 명시적으로 변환하는 것을 권장해요.
  • 암시적 변환이 숫자가 아닌 값을 숫자 값으로 변환하면 결과는 NUMBER(18,5) 타입의 값이에요. 상수가 아닌 숫자 문자열 인자의 경우 NUMBER(18,5)가 숫자 값을 표현하기에 충분하지 않으면 값을 표현할 수 있는 타입으로 인자를 캐스트해요.
  • 두 표현식 중 하나는 UNION, INTERSECT, EXCEPT, MINUS와 같은 집합 연산자를 포함하는 SELECT 문일 수 있어요. 집합 연산자를 사용할 때 데이터 타입이 호환되는지 확인해요. 자세한 내용은 Set operators 항목의 일반 사용 메모(General usage notes)를 참조해요.

정렬 규칙 세부 사항 (Collation details)

  • 모든 입력 인자의 정렬 규칙 지정은 호환되어야 해요.
  • 함수 결과의 정렬 규칙은 입력의 최우선 순위(precedence) 정렬 규칙이에요.

반환 (Returns)

반환된 표현식의 데이터 타입을 반환해요.

두 표현식이 모두 NULL이면 NULL을 반환해요.

예제 (Examples)

공급업체의 연락처 정보를 포함하는 테이블을 생성해요:

CREATE TABLE IF NOT EXISTS suppliers (
  supplier_id INT PRIMARY KEY,
  supplier_name VARCHAR(30),
  phone_region_1 VARCHAR(15),
  phone_region_2 VARCHAR(15));

테이블은 각 공급업체의 전화번호를 두 개의 서로 다른 지역으로 저장해요. 한 지역의 전화번호는 NULL일 수 있어요.

테이블에 값을 삽입해요:

INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2)
  VALUES
    (1, 'Company_ABC', NULL, '555-01111'),
    (2, 'Company_DEF', '555-01222', NULL),
    (3, 'Company_HIJ', '555-01333', '555-01444'),
    (4, 'Company_KLM', NULL, NULL);

다음 SELECT 문은 NVL 함수를 사용해 phone_region_1 및 phone_region_2 값을 검색해요.

이 예제는 NVL 함수에 대한 다음 결과를 보여줘요:

  • IF_REGION_1_NULL 열은 phone_region_1의 값을 포함하거나, 해당 값이 NULL이면 phone_region_2의 값을 포함해요.
  • IF_REGION_2_NULL 열은 phone_region_2의 값을 포함하거나, 해당 값이 NULL이면 phone_region_1의 값을 포함해요.
  • phone_region_1과 phone_region_2가 모두 NULL이면 함수는 NULL을 반환해요.
SELECT supplier_id,
       supplier_name,
       phone_region_1,
       phone_region_2,
       NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
       NVL(phone_region_2, phone_region_1) IF_REGION_2_NULL
  FROM suppliers
  ORDER BY supplier_id;
+-------------+---------------+----------------+----------------+------------------+------------------+
| SUPPLIER_ID | SUPPLIER_NAME | PHONE_REGION_1 | PHONE_REGION_2 | IF_REGION_1_NULL | IF_REGION_2_NULL |
|-------------+---------------+----------------+----------------+------------------+------------------|
|           1 | Company_ABC   | NULL           | 555-01111      | 555-01111        | 555-01111        |
|           2 | Company_DEF   | 555-01222      | NULL           | 555-01222        | 555-01222        |
|           3 | Company_HIJ   | 555-01333      | 555-01444      | 555-01333        | 555-01444        |
|           4 | Company_KLM   | NULL           | NULL           | NULL             | NULL             |
+-------------+---------------+----------------+----------------+------------------+------------------+

더 알아보기 (Learn more)

  • IFNULL
  • 조건부 표현식 함수 (Conditional expression functions)
  • COALESCE