类别:

条件表达式函数

NVL

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

别名:

IFNULL

语法

NVL( <expr1> , <expr2> )
Copy

实参

expr1

通用表达式。

expr2

通用表达式。

使用说明

  • 如果可能,请传入相同类型的实参。避免传入不同类型的实参。

  • 如果其中一个实参是数字,则函数会 强制转换 非数值字符串实参(例如 'a string')和不是类型 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 语句使用 NVL 函数检索 phone_region_1phone_region_2 值。

此示例显示了 NVL 函数的以下结果:

  • 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,
       NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
       NVL(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             |
+-------------+---------------+----------------+----------------+------------------+------------------+
语言: 中文