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

目录

  • 阐述
  • 适用情景
  • 举例说明
  • 结合其他语言理解
  • 小结

阐述

  • case when then else end 可以理解为流程控制语句或条件控制语句。可以实现资料获取的时候,可以更多的条件和自定义逻辑。

适用情景

  • case when then else end 作为数据库查询入门必掌握的技能。
    • 对已知的数据库中数据,按照自己的逻辑,进行自定义分组和数据分析
    • 用此条件控制语句,实现自定义条件分组
    • 条件控制语句中嵌套函数达到理想的计算效果
    • 其他

举例说明

*对已知的数据库中数据,按照自己的逻辑,进行自定义分组和数据分析
*首先SD_GSS表中数据如下

YYEARNO
19922
1992 3
19924
20175
20176
20177
  • 然后,摆出自己的逻辑,对主键进行逻辑定义,另外一个栏位不变,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一致

    DATEDNO
    生日年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
    DATEDNO
    221.333332
    221.333333
    221.333334
    21175
    21176
    21177

结合其他语言理解

  • 很多人拿面相对象语言和建筑做对比,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后台开发者,热衷分享技术,心怀感恩,深耕不缀。"
  }
posted @ 2017-04-29 04:47  工业互联开发百科  阅读(71618)  评论(5编辑  收藏  举报