当前位置:   article > 正文

oracle中case when的用法总结(case when like功能)

case when like

最近大量用到了oracle的sql语句中的case when,闲下来就整理一下。
1.根据类别统计
假设现在有一组数据如下
这里写图片描述
其中,0表示单选题,1表示多选题,现在分别要统计单选题跟多选题的数目,就可以这么做啦
select sum(case t.type when 0 then 1 else 0 end), sum(case t.type when 1 then 1 else 0 end) from Question t;

2.合并数据类型不同的两列(数字型跟字符串型)
假设现在又有一组数据如下
这里写图片描述
假设支付宝里的余额跟微信里的余额是互补的,且支付宝余额是number型,微信余额是varchar型的,现在需要将两列合并,就可以这么这么来做啦
select (case t.zfb
when 0
then ”
else
”||t.zfb end)||t.wx
from Table t;

”||t.zfb这个的意思就是把number型的字段转换成varchar型。
结果就是两组余额的和啦。

那个备注一下哈,上面的是两个单引号,左单‘和’右单。

3.正则拆分取第一个字符串
假设有一个字段data,值是aaa,bbb,ccc,现在只需要取第一个值,就可以用REGEXP_SUBSTR()这个函数
select REGEXP_SUBSTR(t.data,’[^,]+’,1,1,’i’) as a from table t;
这样就可以取到aaa啦,如果是拿最后一个值的话,就这么写
select REGEXP_SUBSTR(t.data,’[^,]+’,1,3,’i’) as a from table t;

4.case when里的like功能
假如要用到case when又要用到like这样的功能,即如果字符串包含‘语文’就怎么怎么样,包含‘数学’就怎么怎么样,包含‘英语’就怎么怎么样,like是用于where中的,放在case when里面是无效的,可以用instr()这个函数来查找这些字符出现的位置,代替like的功能,这样写就好呐。
case when instr(t.str,’语文’) > 0 then 0
when instr(t.str,’语文’) > 0 then 1
when instr(t.str,’语文’) > 0 then 2
else 3 end
另外在多表查询时,一开始我喜欢用in,在执行了一段时间后报出了ora-1几几几数字类型不正确的错误,分析了一下估计是in的括号里的数据太多的缘故,所以尽量不要用in,用关联查询就可以了。

5.附加日期区间
两个日期之间我喜欢这么写
to_char(t.operate_time,’yyyymmdd’) between ‘20170203’ and ‘20170206’
我发现别人是这么写的
t.operate_time > to_date(‘20170203’, ‘yyyymmdd’)
and t.operate_time < to_date(‘20170207’, ‘yyyymmdd’)
请注意两种写法后面一个日期的写法,第二种写法加了一天,如果不加就会少一天,因为是小于嘛。
写法都一样啦,借鉴一下

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/485183
推荐阅读
相关标签
  

闽ICP备14008679号