zoukankan      html  css  js  c++  java
  • 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后台开发者,热衷分享技术,心怀感恩,深耕不缀。"
      }
    
    读万卷书,行万里路,方能回到内心深处。
  • 相关阅读:
    多选下拉框带搜索(aps.net)
    asp.net无刷新上传(带预览)
    http免费升级https 攻略(超简单)
    用JS获取地址栏参数的方法
    C#生成二维码
    update更新另一个字段
    自适应瀑布型布局(手机,PC全兼容)
    微信扫码支付.net版本
    常用css3技巧
    Repeater 嵌套,子级Repeater获取 父级Repeater 中的值
  • 原文地址:https://www.cnblogs.com/gss0525/p/6784338.html
Copyright © 2011-2022 走看看