一、基本语法:
- nvl 函数:
nvl 函数的基本语法为 nvl(E1, E2),如果E1为 NULL,则函数返回E2,否则返回E1本身。但此函数有一定局限,所以就有了nvl2函数。如果两个参数的值都为空值,则返回空值。
注意:第一个参数和第二个参数可以是任何类型的数据,但两个参数的数据类型必须相同(或能够由Oracle隐式转换为相同的类型)
nvl2 函数:
nvl2 函数的基本语法为 nvl2(E1, E2, E3),它是在nvl函数的功能上扩展的,如果E1为 NULL,则函数返回E3,若E1不为 NULL,则返回E2。
二、返回值类型
返回值类型可以为字符型、日期型、日期时间型、数值型、货币型、逻辑型或nul值。
三、说明
在不支持 null 值或 null 值无关紧要的情况下,可以使用 nvl() 函数来移去计算或操作中的 null 值。
select nvl(a.name,'为空想要返回的值') as name from test01 a join test02 b on a.id = b.id;
注意:两个参数得类型要匹配,必须为同一数据类型,除非显式的使用 TO_CHAR 函数。
四、应用场景
nvl() 函数比较常用的是这样的nvl(E1, 0),意思是E1参数查询到为null的情况,就返回 0,不为 null 就返回E1,常用于非空校验。
nvl2() 函数的应用场景也比较多,常用于根据查询的值返回不同的结果。
例如1:查询性别。
select nvl2(gender, '男', '女') as sex from student;
例:2:用列转行函数 vm_concat 查询一个用户和他的账号显示为 用户名a(账号b) 效果。
假如b参数为空的情况就会出现“a()”的参数,而我想要的是b参数为空的情况,直接返回“a”参数,b参数不为空的情况才返回“a(b)”类型的数据,通过nvl2函数就可以很好的实现:
select to_char(wm_concat(nvl2(b, a || '(' || b || ')', a))) as 返回参数 from test01 where id = 1;