oracle中case when的用法总结(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’)
请注意两种写法后面一个日期的写法,第二种写法加了一天,如果不加就会少一天,因为是小于嘛。
写法都一样啦,借鉴一下

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OracleCASE表达式是一种条件分支语句,用于根据不同的条件执行不同的操作。CASE表达式有两种形式:简单CASE和搜索CASE。 简单CASE语句的语法如下: ``` CASE expression WHEN comparison_expression THEN return_value ... WHEN comparison_expression THEN return_value ELSE return_value END ``` 在简单CASE语句,expression是要比较的表达式,comparison_expression是每个WHEN子句后面的表达式,return_value是满足条件时返回的值。简单CASE只能进行完全匹配,相当于使用等于操作符(=),并且不能匹配null值。简单CASE语句可以进行运算、取别名和嵌套。 搜索CASE语句的语法如下: ``` CASE WHEN condition THEN return_value ... WHEN condition THEN return_value ELSE return_value END ``` 在搜索CASE语句,condition是每个WHEN子句后面的条件,可以使用比较操作符(like、!=、between ..and、<、=、is null、is not null等)。搜索CASE语句可以作为比较条件,因此可以替代简单CASE语句,并且更加灵活。 综上所述,OracleCASE语句可以根据不同的条件执行不同的操作,可以使用简单CASE语句进行完全匹配,也可以使用搜索CASE语句进行更广泛的条件匹配。 #### 引用[.reference_title] - *1* [OracleCase When的用法](https://blog.csdn.net/xiaochenXIHUA/article/details/121215294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Oraclecase用法总结](https://blog.csdn.net/qq_44953868/article/details/109075897)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值