>首页> IT >

焦点热议:Oracle中nvl()和nvl2()函数实例详解

时间:2022-08-15 18:50:16       来源:转载
本篇文章给大家带来了关于Oracle的相关知识,NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回响应的列名或表达式,下面这篇文章主要给大家介绍了关于Oracle中nvl()和nvl2()函数的相关资料,希望对大家有帮助。

推荐教程:《Oracle视频教程》


【资料图】

Oracle中nvl()与nvl2()函数详解:

函数nvl(expression1,expression2)根据参数1是否为null返回参数1或参数2的值;函数nvl2(expression1,expression2,expression3)根据参数1是否为null返回参数2或参数3的值。

1.nvl:根据参数1是否为null返回参数1或参数2的值

【函数格式】:nvl(expression1,expression2)

【函数说明】:

若expression1值为null,则该函数返回expression2;若expression1值不为null,则该函数返回expression1;若expression1、expression2的值均为null,则该函数返回null。

【特别说明】:参数expression1和expression2可以是字符型、数字型或日期型,但参数expression1与expression2的类型必须一致。

【样例展示一】:expression1值为null:

expression2为字符型:

select nvl(null,"ABCD") from dual;        --返回:ABCDselect nvl(null,"abcd") from dual;        --返回:abcdselect nvl(null,"12345") from dual;        --返回:12345

expression2为数值型:

select nvl(null,12345) from dual;        --返回:12345select nvl(null,00000) from dual;        --返回:0select nvl(null,-12345) from dual;        --返回:-12345select nvl(null,123.45) from dual;        --返回:123.45select nvl(null,-123.45) from dual;        --返回:-123.45

expression2为日期时间型:

select nvl(null,sysdate) from dual;        --返回:2022/2/25 11:54:18select nvl(null,to_date("2022/2/25 11:54:18","yyyy-mm-dd hh24:mi:ss")) from dual;                        --返回:2022/2/25 11:54:18select nvl(null,to_date("2022/2/25","yyyy-mm-dd")) from dual;        --返回:2022/2/25select nvl(null,to_date("2022","yyyy")) from dual;        --返回:2022/2/1

【样例展示二】:expression1值不为null:

expression1为字符型:

select nvl("ABCD","abcd") from dual;        --返回:ABCDselect nvl("abcd","ABCD") from dual;           --返回:abcdselect nvl("12345","54321") from dual;        --返回:12345

expression1为数值型:

select nvl(12345,null) from dual;        --返回:12345select nvl(00000,11111) from dual;        --返回:0select nvl(-12345,null) from dual;        --返回:-12345select nvl(123.45,-123.45) from dual;        --返回:123.45select nvl(-123.45,123.45) from dual;        --返回:-123.45

expression1为日期时间型:

select nvl(sysdate,null) from dual;        --返回:2022/2/25 12:18:23select nvl(to_date("2022/2/25 12:18:23","yyyy-mm-dd hh24:mi:ss"),null) from dual;                        --返回:2022/2/25 12:18:23select nvl(to_date("2022/2/25","yyyy-mm-dd"),null) from dual;        --返回:2022/2/25select nvl(to_date("2022","yyyy"),null) from dual;        --返回:2022/2/1

【样例展示三】:expression1、expression2值均为null:

select nvl(null,null) from dual;        --返回空值select nvl("",null) from dual;        --返回空值select nvl(null,"") from dual;        --返回空值select nvl("","") from dual;        --返回空值

2.nvl2:根据参数1是否为null返回参数2或参数3的值

【函数格式】:nvl2(expression1,expression2,expression3)

【函数说明】:

若expression1值不为null,则该函数返回expression2值;若expression1值为null,则该函数返回expression3值;若expression1、expression2、expression3值均为null,则该函数返回null。

【特别说明】:

expression1的类型不需要与expression2和expression3的类型保持一致;expression2与expression3的类型尽量保持一致,若不一致,当expression1为null时,则expression3会自动转换为expression2的类型,若两个数据类型之间无法转换,则会报错。

【样例展示一】:expression1值不为null:

expression2和expression3均为字符型:

select nvl2(0,"ABCD","abcd") from dual;        --返回:ABCDselect nvl2("a","ABCD","1234") from dual;        --返回:ABCDselect nvl2(sysdate,"1234","abcd") from dual;        --返回:1234

expression2和expression3均为数值型:

select nvl2(0,12345,54321) from dual;        --返回:12345select nvl2("a",123.45,543.21) from dual;        --返回:123.45select nvl2(sysdate,-12345,-54321) from dual;        --返回:-12345

expression2和expression3数据类型不一致:

注意:此时expression1有值,因此该函数直接返回expression2的值,即使expression3的类型无法转换为expression2的类型也不会报错。

select nvl2(0,"ABCD",54321) from dual;        --返回:ABCDselect nvl2("a","abcd",543.21) from dual;        --返回:abcdselect nvl2(sysdate,"12345",-54321) from dual;        --返回:12345

【样例展示二】:expression1值为null:

expression2和expression3均为字符型:

select nvl2(null,"ABCD","abcd") from dual;        --返回:abcdselect nvl2("","ABCD","1234") from dual;        --返回:1234

expression2和expression3均为数值型:

select nvl2(null,12345,54321) from dual;        --返回:54321select nvl2("",123.45,543.21) from dual;        --返回:543.21

expression2和expression3数据类型不一致:

注意:此时expression1值为null,因此该函数会返回expression3的值,若expression3的类型无法转换为expression2的类型,则会报错。

select nvl2(null,"ABCD",54321) from dual;        --返回:54321select nvl2("","abcd",543.21) from dual;        --返回:543.21select nvl2("",543.21,"abcd") from dual;        --执行报错select nvl2(null,"abcd",sysdate) from dual;        --返回:25-2月 -22select nvl2(null,sysdate,"abcd") from dual;        --执行报错

【样例展示三】:expression1为null,且expression2或expression3值为null:

select nvl2(null,null,"123") from dual;        --返回:123select nvl2(null,"abc",null) from dual;        --返回:空值select nvl2(null,null,null) from dual;        --返回:空值select nvl2("","","") from dual;        --返回:空值

推荐教程:《Oracle视频教程》

以上就是Oracle中nvl()和nvl2()函数实例详解的详细内容,更多请关注php中文网其它相关文章!

关键词: 数据类型 日期时间型 视频教程