数据库-Oracle条件判断语句

Posted Alive

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库-Oracle条件判断语句相关的知识,希望对你有一定的参考价值。

经常有这种需求,如当数据库里的状态为20100时,中文希望显示为办理成功,这个时候就需要条件判断了
Oracle中条件判断有三种,如下将分别介绍

一、case ... when ... then ... else ... end【相当于大于小于等于不等于判断】

  • 语法介绍
SELECT CASE
         WHEN T.A = 1 THEN
          \'成功\'
         WHEN T.A = 2 THEN
          \'失败\'
         ELSE
          \'其他\'
       END test_clo
  FROM TABLE T
-- 注:
A为表T中的列名,后面的意思是当A的值为1时翻译为\'成功\',当2时,翻译为\'失败\',不是这两种就翻译为\'其他\'
test_clo 为上面A的值翻译的值的列名
  • 示例
# 需求:按对应状态分组获取对应的总数,且状态显示对应的中文
SELECT T.ORDER_STATUS 订单状态编码,
       COUNT(1) 分类总数,
       CASE
         WHEN T.ORDER_STATUS = \'20100\' THEN
          \'办理中\'
         WHEN T.ORDER_STATUS = \'20101\' THEN
          \'办理成功\'
         WHEN T.ORDER_STATUS = \'20102\' THEN
          \'办理失败\'
         ELSE
          \'其他\'
       END 订单状态
  FROM BASE_ORDER T
 WHERE T.ORDER_CREATETIME >=
       TO_TIMESTAMP(\'2020-02-14 14:30:00\', \'yyyy-mm-dd hh24:mi:ss\')
 GROUP BY ORDER_STATUS

二、decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)函数【只能相当于等于判断】

  • decode() 函数的语法:
 Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
 
 From talbename
 
 Where …

-- 注:
其中:columnname为要选择的table中所定义的column;

   缺省值可以是你要选择的column name本身,也可以是你想定义的其他值,比如Other等;

主要作用:相当于IF语句, 将查询结果翻译成其他值。(即以其他形式表现出来)。
  • 举例说明:

现定义一table名为output,其中定义两个column分别为monthid(var型)和sale(number型),若sale值=1000时翻译为D,=2000时翻译为C,=3000时翻译为B,=4000时翻译为A,如是其他值则翻译为Other

SELECT MONTHID,
       DECODE(SALE, 1000, \'D\', 2000, \'C\', 3000, \'B\', 4000, \'A\', ’OTHER’) TEST_SALE
  FROM OUTPUT

若只与一个值进行比较:

SELECT MONTHID, DECODE(SALE, NULL, \'---\' ,SALE) TEST_SALE FROM OUTPUT

decode中可使用其他函数,如nvl()函数或sign()函数等:

  NVL(EXPR1,EXPR2)

  若EXPR1是NULL,则返回EXPR2,否则返回EXPR1。

SELECT NAME,NVL(TO_CHAR(COMM),\'NOT APPLICATION\') FROM TABLE1

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

用如下的SQL语句取较小值:

SELECT MONTHID, DECODE(SIGN(SALE - 6000), -1, SALE, 6000) FROM OUTPUT;
  • 示例2
SELECT DECODE(T.ORDER_STATUS,
              \'20100\',
              \'办理中\',
              \'20101\',
              \'办理成功\',
              \'20102\',
              \'办理失败\',
              ORDER_STATUS) 订单状态,
       COUNT(T.ORDER_STATUS)
  FROM BASE_ORDER T
 GROUP BY ORDER_STATUS

三、if … then … end if 【大于小于等于不等于判断,在存储过程中使用】

  • 语法
if con = \'1\' then
   \'满意\'
end if;
if con = \'1\' then
   \'满意\'
else
   \'其他\'
end if;
if con = \'1\' then
   \'满意\'
elsif con = \'2\' then
   \'一般\'
else
   \'不满意\'
end if;

  • 参考

https://www.cnblogs.com/rxhuiu/p/9120130.html
https://blog.csdn.net/yangzjchn/article/details/81019449
https://blog.csdn.net/qq_33550151/article/details/95485508

以上是关于数据库-Oracle条件判断语句的主要内容,如果未能解决你的问题,请参考以下文章

oracleif判断语句

oracle if 语句

关于oracle的事务中,如何判断一条语句是不是成功执行

oraclesql条件语句?

oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件?

oracle if(a && b)两个条件怎么写的