case when 和 decode 的比较分析

Posted sunkai625

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了case when 和 decode 的比较分析相关的知识,希望对你有一定的参考价值。

一、case when

与 if - else 类似,语句如下:
CASE expr WHEN expr1 THEN return_expr1
         [WHEN expr2 THEN return_expr2
          ...
          WHEN exprn THEN return_exprn
          ELSE else_expr]
END

且有两种判断方法,case  字段  when  值    then  return 值

                                 else    return 值  end

例如:

select bname , price, case when price > =10 and price <20 then ‘price1‘      

when price > =20 and price <30 then ‘price2‘
when price >= 30 and price <40 then ‘price3‘

when price > =40 and price <50 then ‘price4‘

when price >= 50 and price <60 then ‘price5‘

else ‘price6‘ end "价格段"
from book;

技术分享图片

二、 decode (Oracle数据库独有)   

DECODE(col|expression, search1, result1
                       [, search2, result2,...,]
                        ...
                       [, searchn, resultn,...,]
                       [, default])

也可以和 sign函数一起使用 

也可以:decode(字段,判断条件,返回值1,返回值2)

select decode(sign(arg1-arg2),-1, arg1, arg2) from dual;

注:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

   select price,decode(price,‘32.5‘,‘活着‘,‘其他‘ ) 书名 from  book;     

技术分享图片

三、比较

 1.DECODE 是Oracle特有的;

 2.CASE WHEN 是Oracle, SQL Server,mysql 都可用;

 3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断;CASE可用于=,>=,<,<=,<>,is null,is not null 等的判断;

    4.DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活。

 













以上是关于case when 和 decode 的比较分析的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Sql关于case-when,if-then,decode

case...when...和decode——oracle

SQL中的decode及case when的用法

Oracle的case when 和decode

Oracle Decode()函数和CASE语句的比较

如何正确使用case when表达式 和 decode函数?