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)
- 모든 입력 인자의 콜레이션 지정(collation specifications)은 호환되어야 합니다.
- 이 함수 결과의 콜레이션은 입력들 중 우선순위(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 문은 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)
- COALESCE · NULLIF · NVL
- IFF — 조건부 함수
- 조건부 표현식 함수