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

相关推荐
m0_6464299729 分钟前
MySQL 初始化 SQL 中文乱码问题总结
数据库·sql·mysql
实战派K8S&DB33 分钟前
TDSQL 核心模块与进程体系
运维·数据库·分布式·sql·mysql
FfHUCisI36 分钟前
Go 性能分析工具 pprof:CPU、Heap 与 Goroutine 实战
数据库·golang
仍然.42 分钟前
Redis---分布式锁
数据库·redis·分布式
ly768942 分钟前
MongoDB 副本集选举风暴排查:从心跳超时到 Journal 刷盘阻塞
数据库·mongodb·php·mongodb 副本集·选举风暴·journal 刷盘·writeconcern
刘天远1 小时前
Agent成本核算实现:事件表、状态分布与Python归集
前端·数据库·人工智能·python
hey you~1 小时前
通话记录与工单关联数据库设计:ER图、中间表、索引优化与分库分表(2026版)
数据库·分库分表·客服系统·数据一致性·后端开发·通话记录·跨系统查询
java_logo1 小时前
Docker 部署 OpenViking:轻松搭建 AI Agent 上下文数据库平台
数据库·人工智能·docker·agent·火山引擎·openviking·轩辕镜像
Codiggerworld1 小时前
Redis 正式接入 AI:当“最懂速度的数据库“开始解决“记忆问题“
数据库·人工智能·redis
白露与泡影1 小时前
Redis 正式接入 AI:当“最懂速度的数据库“开始解决“记忆问题“
数据库·人工智能·redis