oracle 空值转换的几种方式和优劣比较

今天聊一下,oracle中null的转换的几种方式,和优劣比较。

方式一: nvl() 函数

nvl() 函数是一个空值转换函数,具有两个参数。
表达式: nvl(参数1,参数2)
当参数1不会null值时,返回参数1;
当参数1 为 null 时,则返回 参数2。

--假设字段 xm 为null值
select nvl(xm,'张三') from dual;
--结果返回  张三

--假设字段 xm='李四' 不为null值
select nvl(xm,'张三') from dual;
--结果返回  李四

方式二: nvl2() 函数

nvl2() 函数是同样是一个空值转换函数,具有3个参数,是nvl()函数的升级版。
表达式: nvl2(参数1,参数2,参数3)
当参数1不会null值时,返回参数3;
当参数1 为 null 时,则返回 参数2。

--假设字段 xm 为null值
--假设 xm2 = '李四'
--假设 xm3 = '王五'
select nvl2(xm,xm2,xm3) from dual;
--结果返回xm3   王五  

--假设字段 xm='张三' 不为null值
--假设 xm2 = '李四'
--假设 xm3 = '王五'
select nvl2(xm,xm2,xm3) from dual;
--结果返回xm2  李四

方式二: decode() 函数

decode()函数 是一个条件表达式函数,我习惯性的称呼为 翻译函数,顾名思义,decode()函数可以对字段的字典值进行翻译(就是定义这个字典值 表达的意思)。
decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
简单解释一下,decode(2-1,‘1’,‘答案为1’,‘2’,‘答案为2’,‘系统故障未能计算出结果!’),条件是 2-1,结果是 1,1的翻译值是 答案为1,最终的结果就是 答案为1。

现在说一下,为什么decode()函数也可转换值呢,上语句

--假设字段 xb 为null值时,返回'性别未知',xb不为null值时,返回字段xb的值
--假设xb 为 null值时
select decode(xm,null,'性别未知',xb) from dual;
--结果返回  性别未知

--假设字段 xb 为null值时,返回'性别未知',xb=1 返回 男,xb=2 返回 女
--假设xb =2 
select decode(xm,null,'性别未知',1,'男','2','女') from dual;
--结果返回  女

总结:除了这三个函数 case when 判断也可以实现这个效果,但是判断个null值,用上case when 不像是有脑子的人做的,所以这里就不写了。
上述的这三个函数皆可以满足判断null值并对其进行转换,但是decode函数一般不这样用,这里只做普及方法不推荐使用,写语句不但要考虑实现功能,更要考虑到语句的执行性能。
若是只进行判断 null值,推荐使用 nvl() 和 nvl2() 这两个函数。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值