Oracle常用函数之decode

Oracle数据库中如果想要在sql查询中实现if else这样的效果,不仅可以用case when语法,本身提供了一个更为简便的函数,那就是decode,下面来具体看下其使用方法。
为了演示 decode的功能与case when的相似,这篇就用decode来实现上一篇记录case when博客的效果。上一篇中的需求是

当字段username的值为ouxio时,输出的是12345,当值为hahaa时,输出22344,其他情况下都输出emmm

case when篇具体代码如下:

select 
case username
when 'ouxio' then '12345'
when 'hahaa' then '22344'
else  'emmm'
end
as password
from users;

而用decode就简便不少,如下:

select 
decode (username,'ouxio','12345','hahaa','22344','emmm') as password
from users;

decode函数第一个参数是需要判断的字段,剩下的每两个参数代表判断值输出值,比如ouxio12345这两个参数第一个是指当username等于ouxio时输出12345,后面的每两个参数以此类推,这样的两两参数可写多个。而最后的一个参数emmm,意思是当需要判断的字段都没有匹配的值时输出最后一个参数值emmm,这个参数可写可不写。

对比

decode函数和case when很相似,都能完成同样的效果,那么有什么区别呢

  1. 特有性,decode函数是Oracle特有的函数,而case when不仅Oracle,在mysql和sql server都可使用。
  2. 局限性,decode只能判断字段相等,但是可以配合sign函数进行大于、小于、等于,case when可用于更多的条件比较式,并且使用case搜索函数时可对比多个字段。

sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1,所以要用decode判断与某个数的大小可如下

select 
select decode(sign(5-3), 1 ,'大于', -1, '少于', 0 ,'相等') from dual  
from users;
  1. 简便性,decode使用起来相对比较方便,case when虽然繁琐但是更为强大灵活。
扩展 mysql if 函数

mysql也有类似decode功能的函数,那就是if函数,不过功能要逊色许多,只能判断单个条件,若想判断多条件还得用case when。具体的if使用方法如下:

select if(username = 'ouxio','me','you') as iswho from users;

当字段usernameouxio时,输出me,不是时输出you

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值