數據庫-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM