Oracle中的case when then else end用法详解
目录
- 阐述
- 适用情景
- 举例说明
- 结合其他语言理解
- 小结
阐述
case when then else end
可以理解为流程控制语句或条件控制语句。可以实现资料获取的时候,可以更多的条件和自定义逻辑。
适用情景
case when then else end
作为数据库查询入门必掌握的技能。- 对已知的数据库中数据,按照自己的逻辑,进行自定义分组和数据分析
- 用此条件控制语句,实现自定义条件分组
- 条件控制语句中嵌套函数达到理想的计算效果
- 其他
举例说明
*对已知的数据库中数据,按照自己的逻辑,进行自定义分组和数据分析
*首先SD_GSS
表中数据如下
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
-
结果如下
YYEAR 生日年 生日年 生日年 新年 新年 新年 -
用此条件控制语句,实现自定义条件分组
SELECT
CASE YYEAR
WHEN '1992'
THEN '生日年'
ELSE '新年'
END DATED,NO
FROM
SD_GSS
-
END
结尾时,自定义栏位,其余部门和上述SQL
一致DATED NO 生日年 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位,否则加100DATED 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;
}
- 其他
- 视图中,包括
Function
和Procesure
中都会有用到流程控制语句 - 数据更新也会用到
- 做后台开发实现复杂逻辑计算,很长的
SQL
都会用到 - 当然,如果你真正理解了,可以把它结合到很复杂情况中
- 这里就不做过多介绍
- 视图中,包括
小结
- 数据库是一门功能很强大的语言,实现复杂的计算效果,和需求的实现,如果你的思维开了一个口子,想了解更多,那也请继续探索。不登高山,不足以品平原之辽阔。
- 有机会说一说视图,
Function
和Procesure
包括书写规范,注意事项和调试(Debug
)。
感激
星星之火可以燎原,今日点滴的付出,是日后的苦尽甘来。莫愁前路漫漫,天下谁人不识君。感谢你阅读此文稿,也希望你能不吝赐教。推荐比较全面的个人学习网站,希望对你有帮助。
关于作者
var normalChild = {
nickName : "墨客码",
site : "http://www.cnblogs.com/gss0525/"
descTarget : ".net后台开发者,热衷分享技术,心怀感恩,深耕不缀。"
}
读万卷书,行万里路,方能回到内心深处。