oracle中DECODE与CASE的用法区别

对于CASE与DECODE其实并没有太多的区别,他们都是用来实现逻辑判断。OracleDECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能。而CASE9i以后提供的语法,这个语法更加的灵活,提供了IF THEN ELSE的功能。想要知道他们具体的用法,我们先来看看他们的语法:

CASE表达式语法:

CASE还有另外一种语法:


DECODE语法就相对简单的多,DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返then1,...,如果不等于任何一个if值,则返回else。可以用函数或表达式来替代value,if,then,else从而作出一些更有用的比较。

从上面的语法可以看出CASE的语法一与DECODE更多的是用于等值判断,可以这么说decode只能做等值的,case when可以做区间的,使用范围来进行条件区分,decode能做到的,case when也能做到;如果想要用decode进行比较,则需要用到sign()函数。因此二者在固定比较条件时使用差不多。但是如果当比较条件不固定时,显然case when会容易很多。

我们可以通过以下的例子来具体的了解他们的用法


上面两个是用CASE的两种语法来实现的,这种等值的比较,我们也可以用DECODE来实现,但需要注意的是DECODE必须用在SQL语句中


这三个均实现的都是向前台输出c。可以看出decode像是case when的精简版,当要实现的功能比较简单时,用decode方便,简洁.当decode满足不了的时候我们可以用case来解决问题。就像不等值的比较


对于上面的例子依然输出c,i是进行的不等值比较,需要使用的case表达式,不然则需要使用sign()配合使用。对于上面的CASE语句,需要说明一点


这时输出的是a,那是因为CASE语句寻找when的优先级是从上到下。再多的when,也只有一个出口,即其中有一个满足了expr就马上退出case,这点需要牢记。

在此需要说明一点decode是oracle独有的, case when是标准SQL的语法,mysql等其他版本数据库中都可以使用。

实际情况中,我们经常会遇到纵表横表相互转化的问题,这时就需要用到DECODE函数来实现的,具体实现的方法,我们下次再说。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值