首页新闻找找看学习计划

oralce case when then end else 的简化问题

0
悬赏园豆:5 [已解决问题] 解决于 2015-11-06 17:42

case to_char(substr(p.userid, 0, 3))
when '151' then '移动'
when '150'then '移动'
when '152'then '移动'
when '157'then '移动'
when '158'then '移动'
when '159'then '移动'
when '134'then '移动'
when '135'then '移动'
when '136'then '移动'
when '137'then '移动'
when '138'then '移动'
when '139'then '移动'
when '187'then '移动'
when '188'then '移动'
when '147'then '移动'
when '182'then '移动'
when '183'then '移动'
else '联通' end as mobileType

 

 

一起走过的日子……的主页 一起走过的日子…… | 菜鸟二级 | 园豆:236
提问于:2015-10-30 11:40
< >
分享
最佳答案
0

如果我们是使用的Oracle数据库,那么我们就没必要写复杂的case when语句了,Oracle的decode函数可以帮我们实现同样的功能。decode的语法如下:

Sql代码  
  1. decode(value,if-1,then-1,if-2,then-2,..,if-n,then-n,defaultValue)  

  

            其表示如果value的值为“if-1”则返回“then-1”,如果值为“if-n”则返回“then-n”,如果value的值不在给定的if值里面则将返回默认值defaultValue。所以使用decode时,上面的逻辑可以简单的转化为如下这样:

Sql代码  
  1. select decode(t.gender,0,'男',1,'女','未填') as gender from t_user;  

  

            很明显,下面的写法比上面的写法要简单很多。

收获园豆:5
博学多思 | 初学一级 |园豆:89 | 2015-10-30 12:34
其他回答(2)
0

感觉没什么好简化的,你用函数封装起来把

稳稳的河 | 园豆:4183 (老鸟四级) | 2015-10-30 12:17
0

 再建张表,把对应关系写进去,通过联查获取

xmj112288 | 园豆:324 (菜鸟二级) | 2015-10-30 13:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册