深入理解Oracle中的case when then else end

本文深入探讨Oracle中的Case When Then Else End语句,作为数据库查询的重要技能,它用于条件控制和自定义逻辑。通过举例说明,阐述其在数据分组、自定义条件和嵌套函数计算中的应用,并与其他编程语言进行对比,帮助读者更好地理解和运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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

阐述

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

适用情景

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

举例说明

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

YYEARNO
19922
19923
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)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值