当前位置:首页 > 技能相关 > ORACLE > 正文内容

Oracle中decode用法总结

admin3年前 (2022-10-11)ORACLE2900 修订时间:2022-10-11 16:44:37

1.decode含义

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

这个是decode的表达式,具体的含义解释为:

IF 条件=值1 THEN
  RETURN(翻译值1)
ELSIF 条件=值2 THEN    
  RETURN(翻译值2)    
  ......
ELSIF 条件=值n THEN    
  RETURN(翻译值n)
ELSE    
  RETURN(缺省值)
END IF

2.decode的用法

这里主要说的就是decode的用法,在很多时候这个函数还是很有用的。

2.1 翻译值

数据截图:

需求:查询出的数据,1表示男生,2表示女生

select t.id,t.name, t.age,decode(t.sex, '1', '男生', '2', '女生', '其他') as sex
from
STUDENT2 t

结果:

2.2 decode比较大小

说明:sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1

数据截图:

需求:年龄在20以上的显示20以上,20以下的显示20以下,20的显示正好20

select t.id,
       t.name,
       t.age,
       decode(sign(t.age - 20),
              1,
              '20以上',
              -1,
              '20以下',
              0,
              '正好20',
              '未知') as sex  from STUDENT2 t123456789101112

结果:

2.3 decode分段

数据暂无
需求:工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为底薪

select name,
       sal,
       decode(sign(sal - 5000),
              1,
              '高薪',
              0,
              '高薪',
              -1,
              decode(sign(sal - 3000), 1, '中等', 0, '中等', -1, '低薪')) as salname  from person;12345678910

2.4 搜索字符串

数据截图:

需求:找到含有三的姓名

select t.id,
       decode(instr(t.name, '三'), 0, '姓名不含有三', '姓名含有三') as name,
       t.age,
       t.sex  from STUDENT2 t12345

结果:

2.5 判断是否为空

数据截图:

需求:性别为空显示“暂无数据”,不为空原样输出

select t.id,
       t.name,
       t.age,
       decode(t.sex,NULL,'暂无数据',t.sex) as sex  from STUDENT2 t12345

结果:

总结:decode在书写sql的时候还是挺有用的,常用的应该是1和5了吧(我猜的,因为我就是经常用这两种)

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=212

标签: Oracle技巧
分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。