Oracle中的nvl()和nvl2()函数怎么用
Oracle中的nvl()和nvl2()函数怎么用
本篇内容介绍了“Oracle中的nvl()和nvl2()函数怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
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为字符型:
selectnvl(null,'ABCD')fromdual;--返回:ABCDselectnvl(null,'abcd')fromdual;--返回:abcdselectnvl(null,'12345')fromdual;--返回:12345
expression2为数值型:
selectnvl(null,12345)fromdual;--返回:12345selectnvl(null,00000)fromdual;--返回:0selectnvl(null,-12345)fromdual;--返回:-12345selectnvl(null,123.45)fromdual;--返回:123.45selectnvl(null,-123.45)fromdual;--返回:-123.45
expression2为日期时间型:
selectnvl(null,sysdate)fromdual;--返回:2022/2/2511:54:18selectnvl(null,to_date('2022/2/2511:54:18','yyyy-mm-ddhh34:mi:ss'))fromdual;--返回:2022/2/2511:54:18selectnvl(null,to_date('2022/2/25','yyyy-mm-dd'))fromdual;--返回:2022/2/25selectnvl(null,to_date('2022','yyyy'))fromdual;--返回:2022/2/1
【样例展示二】:expression1值不为null:
expression1为字符型:
selectnvl('ABCD','abcd')fromdual;--返回:ABCDselectnvl('abcd','ABCD')fromdual;--返回:abcdselectnvl('12345','54321')fromdual;--返回:12345
expression1为数值型:
selectnvl(12345,null)fromdual;--返回:12345selectnvl(00000,11111)fromdual;--返回:0selectnvl(-12345,null)fromdual;--返回:-12345selectnvl(123.45,-123.45)fromdual;--返回:123.45selectnvl(-123.45,123.45)fromdual;--返回:-123.45
expression1为日期时间型:
selectnvl(sysdate,null)fromdual;--返回:2022/2/2512:18:23selectnvl(to_date('2022/2/2512:18:23','yyyy-mm-ddhh34:mi:ss'),null)fromdual;--返回:2022/2/2512:18:23selectnvl(to_date('2022/2/25','yyyy-mm-dd'),null)fromdual;--返回:2022/2/25selectnvl(to_date('2022','yyyy'),null)fromdual;--返回:2022/2/1
【样例展示三】:expression1、expression2值均为null:
selectnvl(null,null)fromdual;--返回空值selectnvl('',null)fromdual;--返回空值selectnvl(null,'')fromdual;--返回空值selectnvl('','')fromdual;--返回空值
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均为字符型:
selectnvl2(0,'ABCD','abcd')fromdual;--返回:ABCDselectnvl2('a','ABCD','1234')fromdual;--返回:ABCDselectnvl2(sysdate,'1234','abcd')fromdual;--返回:1234
expression2和expression3均为数值型:
selectnvl2(0,12345,54321)fromdual;--返回:12345selectnvl2('a',123.45,543.21)fromdual;--返回:123.45selectnvl2(sysdate,-12345,-54321)fromdual;--返回:-12345
expression2和expression3数据类型不一致:
注意:此时expression1有值,因此该函数直接返回expression2的值,即使expression3的类型无法转换为expression2的类型也不会报错。
selectnvl2(0,'ABCD',54321)fromdual;--返回:ABCDselectnvl2('a','abcd',543.21)fromdual;--返回:abcdselectnvl2(sysdate,'12345',-54321)fromdual;--返回:12345
【样例展示二】:expression1值为null:
expression2和expression3均为字符型:
selectnvl2(null,'ABCD','abcd')fromdual;--返回:abcdselectnvl2('','ABCD','1234')fromdual;--返回:1234
expression2和expression3均为数值型:
selectnvl2(null,12345,54321)fromdual;--返回:54321selectnvl2('',123.45,543.21)fromdual;--返回:543.21
expression2和expression3数据类型不一致:
注意:此时expression1值为null,因此该函数会返回expression3的值,若expression3的类型无法转换为expression2的类型,则会报错。
selectnvl2(null,'ABCD',54321)fromdual;--返回:54321selectnvl2('','abcd',543.21)fromdual;--返回:543.21selectnvl2('',543.21,'abcd')fromdual;--执行报错selectnvl2(null,'abcd',sysdate)fromdual;--返回:25-2月-22selectnvl2(null,sysdate,'abcd')fromdual;--执行报错
【样例展示三】:expression1为null,且expression2或expression3值为null:
selectnvl2(null,null,'123')fromdual;--返回:123selectnvl2(null,'abc',null)fromdual;--返回:空值selectnvl2(null,null,null)fromdual;--返回:空值selectnvl2('','','')fromdual;--返回:空值
“Oracle中的nvl()和nvl2()函数怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!
推荐阅读
-
4种方法教你获取Oracle数据库当前会话/进程的session id
-
在PL/SQL中调用Oracle ERP提交请求集的示例分析
在PL/SQL中调用OracleERP提交请求集的示例分析这篇文...
-
Oracle WebLogic XMLDecoder反序列化漏洞分析是怎样进行的
-
Oracle手动建库安装部署的方法
这篇文章主要介绍了Oracle手动建库安装部署的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获...
-
Oracle数据库如何下载与安装
-
在.net中连接oracle的方法有哪些
今天就跟大家聊聊有关在.net中连接oracle的方法有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,...