- 类别:
IFNULL¶
如果 expr1 是 NULL,则返回 expr2,否则返回 expr1。
- 别名:
语法¶
IFNULL( <expr1> , <expr2> )
实参¶
expr1通用表达式。
expr2通用表达式。
使用说明¶
Snowflake 对实参执行 隐式转换 以使其兼容。例如,如果其中一个输入表达式是数值类型,则返回类型也是数值类型。也就是说,
SELECT IFNULL('17', 1);首先将 VARCHAR 值'17'转换为 NUMBER 值17,然后返回第一个非 NULL 的值。当无法进行转换时,隐式转换将失败。例如,
SELECT IFNULL('foo', 1);返回错误,因为 VARCHAR 值'foo'无法转换为 NUMBER 值。We recommend passing in arguments of the same type or explicitly converting arguments if needed.
当隐式转换将非数值转换为数值时,结果为 NUMBER(18,5) 类型的值。
对于不是常量的数值字符串实参,如果 NUMBER(18,5) 不足以表示数值,则将实参 转换 为可以表示该值的类型。
排序规则详细信息¶
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 |
+-------------+---------------+----------------+----------------+------------------+------------------+