1.NVL2 函数用法

语法:NVL2(expr1, expr2, expr3)

说明:如果 expr1(表达式1)不是 null 值,则 NVL2 函数返回 expr2(表达式2),否则就返回 expr3(表达式3)。

2.NVL2 函数注意事项

expr2(表达式2)和 expr3(表达式3)不能是 LONG 数据类型。
由于 LONG 类型的特殊性,通常不建议将其作为 NVL2 函数的参数或返回值类型。如果确实需要处理大型文本数据,建议使用 CLOB 类型。

3.隐式转换规则

  1. 若 expr2(表达式2)是字符数据,则 Oracle 数据库在比较之前就会把 expr3(表达式3)(expr3 不为 null)转换成 expr2(表达式2)的数据类型并且返回 VARCHAR2 数据类型到 expr2(表达式2)的字符集。

  2. 若 expr2(表达式2)是数值型,则 Oracle 数据库决定哪个参数具有最高数值优先级,并把另一个参数的数据类型隐式转换成这种数据类型,并返回这种数据类型的数据。

4.NVL2 函数使用示例

问题:查询员工收入,员工收入(income)由工资(salary)加奖金(commission_pct)组成,若该员工没有奖金(commission_pct)则 commission_pct 列为 null。

答案:

SELECT last_name, salary, 
NVL2(commission_pct, salary + (salary * commission_pct), salary) income 
FROM employees
WHERE last_name LIKE 'B%'
ORDER BY last_name;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

结果:

Oracle 11g - - - NVL2 函数的用法_数据类型

参考: https://www.cnblogs.com/hanfeihanfei/p/7699637.html