类别:

条件表达式函数

IFNULL

如果 expr1 是 NULL,则返回 expr2,否则返回 expr1

别名:

NVL

语法

IFNULL( <expr1> , <expr2> )
Copy

实参

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) 不足以表示数值,则将实参 转换 为可以表示该值的类型。

  • 任一表达式都可以包含 SELECT 语句,该语句包含集合运算符,例如 UNIONINTERSECTEXCEPTMINUS。使用集合运算符时,请确保数据类型兼容。有关详细信息,请参阅 集运算符 主题中的 一般使用说明

排序规则详细信息

返回

返回所返回表达式的数据类型。

如果两个表达式都是 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));
Copy

该表包含两个不同区域的每个供应商的电话号码。对于一个区域,电话号码可以是 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);
Copy

下面的 SELECT 语句使用 IFNULL 函数检索 phone_region_1phone_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_1phone_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;
Copy
+-------------+---------------+----------------+----------------+------------------+------------------+
| 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             |
+-------------+---------------+----------------+----------------+------------------+------------------+
语言: 中文