zoukankan      html  css  js  c++  java
  • 数据库-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

  • 相关阅读:
    多态与鸭子类型
    mixin与派生
    4.9作业
    property
    继承
    封装
    《梦断代码》阅读笔记1
    阅读笔记3——《大道至简》第四、五、六章
    阅读笔记2——《大道至简》第二、三章
    阅读笔记1——《大道至简》第一章
  • 原文地址:https://www.cnblogs.com/sunxiuwen/p/12309607.html
Copyright © 2011-2022 走看看