NVL 函数从两个表达式返回一个非 NULL 值。如果 expr1expr2 的结果皆为 NULL 值,则 NVL 函数返回 NULL

语法

  1. NVL(expr1, expr2)

参数

参数

说明

expr1

表达式。数据类型可以是 OceanBase 内建数据类型 中的任何数据类型。

expr2

表达式。数据类型可以是 OceanBase 内建数据类型中的任何数据类型。

expr1expr2 必须是相同类型,或者可以隐式转换为相同类型。如果它们不能隐式转换,则 OceanBase 返回错误。隐式转换实现如下:

  • 如果 expr1CHARNCHARNVARCHARVARCHAR2VARCHAR 字符型数据,则 OceanBase 在比较 expr1 之前将 expr2 转换为 expr1 的数据类型,并返回 expr1 字符集的 VARCHAR2

  • 如果 expr1NUMBERFLOATBINARY_FLOATBINARY_DOUBLE 数值型数据,则 OceanBase 确定哪个参数具有最高的数字优先级,隐式地将另一个参数转换为该数据类型,并返回该数据类型。

返回类型

如果 expr1expr2NULL,则返回 NULL。如果 expr1CHARNCHARNVARCHARVARCHAR2VARCHAR 字符型数据,则返回 expr1 字符集的 VARCHAR2。如果 expr1NUMBERFLOATBINARY_FLOATBINARY_DOUBLE 数值型数据,则返回 expr1 中具有最高数字优先级的数据类型。

示例

假设有一张表 EMPLOYEES,给员工姓名列 name 和佣金列 commission_pct 里面插入数据,执行以下语句:

  1. CREATE TABLE EMPLOYEES (name VARCHAR(20),commission_pct float(5));
  2. INSERT INTO EMPLOYEEs VALUES ('Baer', null);
  3. INSERT INTO EMPLOYEEs VALUES ('Bada', null);
  4. INSERT INTO EMPLOYEEs VALUES ('Boll', 0.1);
  5. INSERT INTO EMPLOYEEs VALUES ('Bates', 0.15);
  6. INSERT INTO EMPLOYEEs VALUES ('Eric', null);

查询员工的姓名和佣金,如果员工没有收到佣金,则显示 Not Applicable。执行以下语句:

  1. SELECT name, NVL(TO_CHAR(commission_pct), 'Not Applicable') commission
  2. FROM employees WHERE name LIKE 'B%' ORDER BY name;

查询结果如下:

  1. +--------------+----------------+
  2. | NAME | COMMISSION |
  3. +--------------+----------------+
  4. | Baer | Not Applicable |
  5. +--------------+----------------+
  6. | Bada | Not Applicable |
  7. +--------------+----------------+
  8. | Boll | .1 |
  9. +--------------+----------------+
  10. | Bates | .15 |
  11. +--------------+----------------+