13.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为字符型:

select nvl(null,'ABCD') from dual; --返回:ABCD

select nvl(null,'abcd') from dual; --返回:abcd

select nvl(null,'12345') from dual; --返回:12345

expression2为数值型:

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

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

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

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

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

expression2为日期时间型:

select nvl(null,sysdate) from dual; --返回:2022/2/25 11:54:18

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

select nvl(null,to_date('2022/2/25','yyyy-mm-dd')) from dual; --返回:2022/2/25

select nvl(null,to_date('2022','yyyy')) from dual; --返回:2022/2/1

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

expression1为字符型:

select nvl('ABCD','abcd') from dual; --返回:ABCD

select nvl('abcd','ABCD') from dual; --返回:abcd

select nvl('12345','54321') from dual; --返回:12345

expression1为数值型:

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

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

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

select nvl(123.45,-123.45) from dual; --返回:123.45

select nvl(-123.45,123.45) from dual; --返回:-123.45

expression1为日期时间型:

select nvl(sysdate,null) from dual; --返回:2022/2/25 12:18:23

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

select nvl(to_date('2022/2/25','yyyy-mm-dd'),null) from dual; --返回:2022/2/25

select 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; --返回:ABCD

select nvl2('a','ABCD','1234') from dual; --返回:ABCD

select nvl2(sysdate,'1234','abcd') from dual; --返回:1234

expression2和expression3均为数值型:

select nvl2(0,12345,54321) from dual; --返回:12345

select nvl2('a',123.45,543.21) from dual; --返回:123.45

select nvl2(sysdate,-12345,-54321) from dual; --返回:-12345

expression2和expression3数据类型不一致:

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

select nvl2(0,'ABCD',54321) from dual; --返回:ABCD

select nvl2('a','abcd',543.21) from dual; --返回:abcd

select nvl2(sysdate,'12345',-54321) from dual; --返回:12345

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

expression2和expression3均为字符型:

select nvl2(null,'ABCD','abcd') from dual; --返回:abcd

select nvl2('','ABCD','1234') from dual; --返回:1234

expression2和expression3均为数值型:

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

select nvl2('',123.45,543.21) from dual; --返回:543.21

相关推荐
广州智造1 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
技术宝哥4 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸5 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1236 小时前
Redis解析
数据库·redis·缓存
数据库幼崽6 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd6 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou7 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh7 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵8 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多9 小时前
Linux——mysql主从复制与读写分离
数据库·mysql