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后台开发者,热衷分享技术,心怀感恩,深耕不缀。"
  }
相关文章
相关标签/搜索