1.NVL函数
从两个表达式返回一个非 null 值。 语法 NVL(expression1, expression2) 参数 expression1, expression2 如果 expression1 的计算结果为 null 值,则 NVL( ) 返回 expression2。如果 expression1 的计算结果不是 null 值,则返回 expression1。expression1 和 expression2 可以是任意一种数据类型。如果 expression1 与 expression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。 返回值类型 字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值。通是expression1,expression2还可以是SELECT语句。
2.NVL2函数
语法NVL(expression0, expression1,expression2) 参数 expression0,expression1, expression2 如果 expression0 的计算结果为 null 值,则 NVL( ) 返回 expression2。如果 eEpression0 的计算结果不是 null 值,则返回 expression1。expression1和expression2类型不同的话,expression2会转换为expression1的类型 返回值类型 字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值
3.nullif
NULLIF (expr1, expr2) expr1与expr2相等返回NULL,不等则返回expr1 注意类型要一致 4.decode
decode (expression, search_1, result_1, search_2, result_2, ., search_n, result_n, default)
decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
工作中遇到的一个问题
在提取相关数据是,调用了NVL函数,区别是NVL的两个参数都是SELECT语句,运行便报一列返回多值的错误:
此时,将两个语句都进行排查后发现第二个参数中的SELECT语句报的错,于是乎将第一个SELECT语句修改为查询结果不是NULL,结果还是报同样的错误,反复查询多次,最后将第二个参数的SELECT语句改为0,则运行正常,于是乎在折磨了近半个小时时,得出以下结论:
NVL函数两个参数中任何一个参数为SELECT语句,在调用NVL函数时:先执行SELECT语句后判断时候为空