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

目錄

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

闡述

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

適用情景

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

舉例說明

對已知的數據庫中數據,按照本身的邏輯,進行自定義分組和數據分析
首先SD_GSS表中數據以下javascript

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
  • 結果以下
    java

    YYEAR
    生日年
    生日年
    生日年
    新年
    新年
    新年

  • 用此條件控制語句,實現自定義條件分組git

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

    DATED NO
    生日年 2
    生日年 3
    生日年 4
    新年 5
    新年 6
    新年 7

  • 條件控制語句中嵌套函數達到理想的計算效果sql

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後臺開發者,熱衷分享技術,心懷感恩,深耕不綴。"
  }
相關文章
相關標籤/搜索