Oracle中nvl()和nvl2()函数实例详解

 更新时间:2022年05月18日 10:19:33   作者:实泽有之,无泽虚之  
NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回响应的列名或表达式,下面这篇文章主要给大家介绍了关于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

expression2和expression3数据类型不一致:

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

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

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

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

总结

到此这篇关于Oracle中nvl()和nvl2()函数详解的文章就介绍到这了,更多相关Oracle nvl()和nvl2()函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle开发之报表函数

    Oracle开发之报表函数

    本文主要介绍Oracle报表函数RATIO_TO_REPORT的具体使用方法,需要的朋友可以参考下。
    2016-05-05
  • 一个oracle指令的好网站

    一个oracle指令的好网站

    一个oracle指令的好网站...
    2007-03-03
  • Oracle在PL/SQL中使用存储过程

    Oracle在PL/SQL中使用存储过程

    这篇文章介绍了Oracle在PL/SQL中使用存储过程的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • window10 安装Oracle19C 和SQL Developer 的图文教程

    window10 安装Oracle19C 和SQL Developer 的图文教程

    这篇文章主要介绍了window10 安装Oracle19C 和SQL Developer 教程(图文详解),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • oracle与gbase8s迁移数据类型对照以及举例说明

    oracle与gbase8s迁移数据类型对照以及举例说明

    gbase8s是一个高性能的分布式关系型数据库,下面这篇文章主要给大家介绍了关于oracle与gbase8s迁移数据类型对照以及举例说明的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • oracle impdp network_link参数使用介绍

    oracle impdp network_link参数使用介绍

    本文将介绍oracle impdp network_link参数使用方法,需要了解更多的朋友可以参考下
    2012-11-11
  • oracle正则表达式多项匹配时相似项有优先级详解

    oracle正则表达式多项匹配时相似项有优先级详解

    这篇文章主要给大家介绍了关于oracle正则表达式多项匹配时相似项有优先级的相关资料,Oracle中使用正则表达式需先使用REGEXP_LIKE函数来匹配字符串,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)

    oracle导出sql语句的结果集和保存执行的sql语句(深入分析)

    本篇文章是对oracle导出sql语句的结果集与保存执行的sql语句进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Oracle表空间数据文件移动的方法

    Oracle表空间数据文件移动的方法

    最近接了个项目,遇到这样的问题,需要实现把用户表空间中的数据文件从某一个路径下移动到另一个路径下,实现过程说简单不简单,说复杂不复杂,下面小编给大家分享我的解决办法,对oracle表空间数据文件相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • Oracle如何修改当前的序列值实例详解

    Oracle如何修改当前的序列值实例详解

    很多时候我们都会用到oracle序列,那么我们怎么修改序列的当前值呢?下面这篇文章主要给大家介绍了关于Oracle如何修改当前的序列值的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05

最新评论