Oracle中的case when then else end用法詳解


目錄

  • 闡述
  • 適用情景
  • 舉例說明
  • 結合其他語言理解
  • 小結

闡述

  • case when then else end 可以理解為流程控制語句或條件控制語句。可以實現資料獲取的時候,可以更多的條件和自定義邏輯。

適用情景

  • case when then else end 作為數據庫查詢入門必掌握的技能。
    • 對已知的數據庫中數據,按照自己的邏輯,進行自定義分組和數據分析
    • 用此條件控制語句,實現自定義條件分組
    • 條件控制語句中嵌套函數達到理想的計算效果
    • 其他

舉例說明

*對已知的數據庫中數據,按照自己的邏輯,進行自定義分組和數據分析
*首先SD_GSS表中數據如下

YYEAR NO
1992 2
1992 3
1992 4
2017 5
2017 6
2017 7
  • 然后,擺出自己的邏輯,對主鍵進行邏輯定義,另外一個欄位不變,1992年定義為'生日年',2017年定義為'新年'
  SELECT 
  CASE YYEAR 
  WHEN '1992' 
  THEN '生日年'  
  ELSE  '新年' 
  END   YYEAR  
  FROM 
  SD_GSS
  • 結果如下

    YYEAR
    生日年
    生日年
    生日年
    新年
    新年
    新年
  • 用此條件控制語句,實現自定義條件分組

  SELECT 
  CASE YYEAR 
  WHEN '1992' 
  THEN '生日年'  
  ELSE  '新年' 
  END  DATED,NO  
  FROM 
  SD_GSS
  • END 結尾時,自定義欄位,其余部門和上述SQL一致

    DATED NO
    生日年 2
    生日年 3
    生日年 4
    新年 5
    新年 6
    新年 7
  • 條件控制語句中嵌套函數達到理想的計算效果

  SELECT 
  CASE YYEAR 
  WHEN '1992' 
  THEN ROUND(YYEAR/9,5) 
  ELSE  YYEAR+100
  END DATED,NO
  FROM 
  SD_GSS 
  • 上面SQL意思是,1992年,讓此主鍵除9,除不盡,用ROUND函數,小數點后保留5位,否則加100
    DATED NO
    221.33333 2
    221.33333 3
    221.33333 4
    2117 5
    2117 6
    2117 7

結合其他語言理解

  • 很多人拿面相對象語言和建築做對比,C語言是基礎,是面向對象語言基礎。拿C語言中的if..else..來對比case when then else end
  if(YYEAR=='1992')
  {
    YYEAR=YYEAR/9.0;
  }
  else
  {
    YYEAR=YYEAR+100;
  }
  • 也可以用if..else if...else if...else來類比case when then else end,結果可能不一致,但是思想大致一致,可以幫助你,快速理解
  if(YYEAR=='1992')
  {
    YYEAR=YYEAR/9.0;
  }
  else if(YYEAR=='2017')
  {
    YYEAR=YYEAR+100;
  }
  else
  {
    YYEAR=YYEAR+100;
  }
  • 其他
    • 視圖中,包括FunctionProcesure中都會有用到流程控制語句
    • 數據更新也會用到
    • 做后台開發實現復雜邏輯計算,很長的SQL都會用到
    • 當然,如果你真正理解了,可以把它結合到很復雜情況中
    • 這里就不做過多介紹

小結

  • 數據庫是一門功能很強大的語言,實現復雜的計算效果,和需求的實現,如果你的思維開了一個口子,想了解更多,那也請繼續探索。不登高山,不足以品平原之遼闊。
  • 有機會說一說視圖,FunctionProcesure包括書寫規范,注意事項和調試(Debug)。

感激

星星之火可以燎原,今日點滴的付出,是日后的苦盡甘來。莫愁前路漫漫,天下誰人不識君。感謝你閱讀此文稿,也希望你能不吝賜教。推薦比較全面的個人學習網站,希望對你有幫助。

關於作者

  var normalChild = {
    nickName  : "墨客碼",
    site : "http://www.cnblogs.com/gss0525/"
    descTarget : ".net后台開發者,熱衷分享技術,心懷感恩,深耕不綴。"
  }


免責聲明!

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



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