oracle函数nvl, nvl2, nullif

时间:2021-02-25 11:52:34

nvl函数

语法: NVL(表达式1, 表达式2)

select nvl(s.name, '未填写') from student s

如果表达式1的值为空, 则显示第二个值, 否则显示原来的值, 

 

nvl2函数

语法: NVL2(表达式1, 表达式2, 表达式3)

select nvl(s.name, 'a', 'b') from student s

如果表达式1的值不为空, 显示表达式2, 为空的话显示表达式3

 

这两个函数还有一个重大的区别, NVL函数中表达式1和表达式2的值必须为同一类型, 

但除去另外一种情况, 当传入的参数为字符串类型时, oracle会先尝试转换成数字, 如果无法转换成数字则会报错, 能转换成功则会正常运行

oracle函数nvl, nvl2, nullif

oracle函数nvl, nvl2, nullif

oracle函数nvl, nvl2, nullif

oracle函数nvl, nvl2, nullif

而NVL2中没有此限制

 

NULLIF(表达式1, 表达式2)

语法: NULLIF(表达式1, 表达式2)

select nullif('a', 'b') from dual

如果表达式1与表达式2相等, 则返回空, 不相等则返回表达式2, 其中表达式1和表达式2也必须为同一类型