IFNULL

IFNULL

expr1이 NULL이면 expr2를, 그렇지 않으면 expr1을 돌려주는 조건부 표현식 함수예요. NVL과 동의어예요.

출처: 공식 문서

본문

expr1이 NULL이면 expr2를 반환하고, 그렇지 않으면 expr1을 반환합니다.

별칭 (Aliases): NVL

구문 (Syntax)

IFNULL( <expr1> , <expr2> )

인자 (Arguments)

expr1

일반 표현식입니다.

expr2

일반 표현식입니다.

사용 참고 (Usage notes)

  • Snowflake는 인자를 호환 가능하게 만들기 위해 암시적 변환(implicit conversion)을 수행합니다. 예를 들어 입력 표현식 중 하나가 숫자 타입이면 반환 타입도 숫자 타입입니다. 즉 SELECT IFNULL('17', 1);은 먼저 VARCHAR 값 '17'을 NUMBER 값 17로 변환한 뒤 첫 번째 NULL이 아닌 값을 반환합니다.

변환이 불가능하면 암시적 변환은 실패합니다. 예를 들어 SELECT IFNULL('foo', 1);은 VARCHAR 값 'foo'를 NUMBER 값으로 변환할 수 없으므로 오류를 반환합니다.

같은 타입의 인자를 전달하거나 필요하면 인자를 명시적으로 변환할 것을 권장합니다.

  • 암시적 변환이 숫자가 아닌 값을 숫자 값으로 변환하면, 결과는 NUMBER(18,5) 타입의 값입니다. 상수가 아닌 숫자 문자열 인자에서 NUMBER(18,5)가 그 숫자 값을 표현하기에 충분하지 않으면, 그 값을 표현할 수 있는 타입으로 인자를 캐스팅(cast)하세요.
  • 어떤 표현식이든 UNION, INTERSECT, EXCEPT, MINUS 같은 집합 연산자를 포함하는 SELECT 문을 포함할 수 있습니다. 집합 연산자를 사용할 때는 데이터 타입이 호환되도록 하세요. 자세한 내용은 Set operators 주제의 General usage notes를 참고하세요.

콜레이션 세부 사항 (Collation details)

반환값 (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 문은 IFNULL 함수를 사용해 phone_region_1과 phone_region_2 값을 가져옵니다.

이 예제는 IFNULL 함수의 다음 결과를 보여줍니다:

  • 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,
       IFNULL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
       IFNULL(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)