Oracle中case when的用法

Oracle中case when的用法

case when 表达式是一个通用条件的表达式,可以在表达式有效的任何位置使用。
用法如下:
CASE
WHEN condition THEN result
[ WHEN condition THEN result ]
...
[ ELSE result ]
END

condition返回一个布尔结果的表达式。如果结果为false,则以相同的方式评估后续where子句。
result当关联条件为真时要返回的值
ELSE result如果没有条件,则CASE表达式的值是ELSE子句中的结果。 如果省略ELSE子句且没有条件匹配,则结果为null。
例如:
SELECT a, CASE WHEN a=1 THEN 'one'
WHEN a=2 THEN 'two'
ELSE 'other' END
FROM test;

结果如下:
a | case
—+——-
1 | one
2 | two
3 | other

上述只是简单的用法,有定义可以看出,有两点需要注意
1.result表示关联条件为真时返回的值,所以无论有多少个when子句,其result都必须的同一个类型的值,因为一个关系型数据库字段只能有一种类型(含括else可能返回的结果)
2.condition “如果为false,则以相同的方式评估后续where子句”即如果为真,就按照这种方式返回结果result,相当与是有先后顺序的

例如 验证2:判断电话134********(以134开头)的号码归属运营商
select case when substr('134********',1,4) = '1349' then '电信' else '移动' end

由号段可知,以1349开头的电话号码为电信,但是134开头号码的移动,所以不能单纯的截取3位来判断,这就是先判断前四位,再判断前三位。利用了case when的先后顺序。

拓展:判断号码归属地:
select case when substr(a.tel,1,4) in ('1703','1705','1706','1440') then '移动'
when substr(a.tel,1,4) in ('1704','1707','1708','1709') then '联通'
when substr(a.tel,1,4) in ('1410','1700','1701','1702','1349') then '电信'
when substr(a.tel,1,3)('134','135','136','137','138','139','150','151','152','157','158','159','182','183','184','187','188','178','147','198','148') then '移动'
when substr(a.tel,1,3) in ('130','131','132','155','156','185','186','176','145','171','166','146') then '联通'
when substr(a.tel,1,3) in ('133','153','189','180','181','177','173','149','199') then '电信'
end as operator_type
from tb_tel a

  • 30
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据甄小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值