- 카테고리:
IFNULL¶
expr1 이 NULL인 경우 expr2 를 반환하고, 그렇지 않으면 expr1 을 반환합니다.
- 별칭:
구문¶
IFNULL( <expr1> , <expr2> )
인자¶
expr1일반적인 식입니다.
expr2일반적인 식입니다.
사용법 노트¶
Snowflake는 인자가 호환되도록 하기 위해 암시적 변환 <label-when_coercion_occurs>`을 수행합니다. 예를 들어, 입력 식 중 하나가 숫자 유형인 경우 반환 유형도 숫자 유형입니다. 즉, :code:`SELECT IFNULL(‘17’, 1);`은 먼저 VARCHAR 값 :code:’17’`을 NUMBER 값 :code:`17`로 변환한 후 첫 번째 NULL이 아닌 값을 반환합니다.
변환이 불가능하면 암시적 변환이 실패합니다. 예를 들어,
SELECT IFNULL('foo', 1);`은 VARCHAR 값 :code:’foo’`를 NUMBER 값으로 변환할 수 없으므로 오류를 반환합니다.We recommend passing in arguments of the same type or explicitly converting arguments if needed.
암시적 변환이 숫자가 아닌 값을 숫자 값으로 변환하는 경우 결과는 NUMBER(18,5) 유형의 값이 됩니다.
상수가 아닌 숫자형 문자열 인자의 경우 NUMBER(18,5)가 숫자 값을 나타내기에 충분하지 않으면 해당 값을 나타낼 수 있는 형식으로 인자를 형 변환 해야 합니다.
두 식 모두
UNION,INTERSECT,EXCEPT,MINUS같은 세트 연산자가 있는SELECT문을 포함할 수 있습니다. 세트 연산자를 사용할 때 데이터 타입이 호환되는지 확인하십시오. 자세한 내용은 세트 연산자 항목의 일반적인 사용법 노트 를 참조하십시오.
데이터 정렬 세부 정보¶
The collation specifications of all input arguments must be compatible.
The collation of the result of the function is the highest-precedence collation of the inputs.
반환¶
반환 식의 데이터 타입을 반환합니다.
두 식이 모두 NULL인 경우에는 NULL을 반환합니다.
예¶
공급자의 연락처 정보가 포함된 테이블을 만듭니다.
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 |
+-------------+---------------+----------------+----------------+------------------+------------------+