• 售前

  • 售后

热门帖子
入门百科

Oracle中decode函数用法

[复制链接]
邱建华 显示全部楼层 发表于 2022-1-7 22:09:58 |阅读模式 打印 上一主题 下一主题
1.decode函数的两种情势

第一种情势

含义解释:
  1. decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
复制代码
该函数的含义如下:
  1. IF 条件=值1 THEN
  2.     RETURN(翻译值1)
  3. ELSIF 条件=值2 THEN
  4.     RETURN(翻译值2)
  5.     ......
  6. ELSIF 条件=值n THEN
  7.     RETURN(翻译值n)
  8. ELSE
  9.     RETURN(缺省值)
  10. END IF
复制代码
第二种情势
  1. decode(字段或字段的运算,值1,值2,值3)
复制代码
这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
固然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简朴了很多
sign()函数

解释:
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
用法示例:
  1. select id,sign(id-2) from t_decode;
复制代码
截图效果:

lpad()函数

在字段id前边补字段0 长度为2
  1. select lpad(id,2,0) from t_decode;
复制代码

2.decode的一些工作常用思路总结

a.准备测试数据

创建测试表t_decode,并插入测试数据
  1. //创建表,插入数据,查询
  2. create table t_decode(
  3.        id integer,
  4.        name varchar2(10)
  5. );
  6. //插入数据
  7. insert into t_decode values (1,'a');
  8. insert into t_decode values (2,'b');
  9. insert into t_decode values (3,'c');
  10. insert into t_decode values (4,'a');
复制代码
数据样式

b.第一种情势decode函数的常用思路

1. 简朴使用:判断字符串
  1. select id,name,
  2.         decode(id,1,'第一个',2,'第二个',3,'第三个','没有') new_id
  3. from t_decode;
复制代码

2.使用decode函数分段

判断表中id巨细并根据巨细分别差别范围
(-,2) low
[2,4) mid
[4,-] high
  1. select id,name,
  2.    decode(sign(id - 4),1,'high id',0,'high id','-1',
  3.                           decode(sign(id - 2),1,'mid id',0,'mid id',-1,'low id'))
  4. from t_decode;
复制代码

c.第二种情势decode函数的常用思路

1. 比较巨细
  1. -- 比较大小
  2. select decode(sign(100-90),-1,100,90) from dual;
复制代码

2. 使用表达式来搜索字符串

判断name中是否含有a?
  1. select id,name,decode(instr(name,'a'),0,'不含有a','含有a') as info from t_decode;
复制代码

3. 实现行列转换
  1. 注意:decode相当于:case when then else end语句
复制代码
  1. select
  2.         sum(decode(name,'a',id,0)) id_1,
  3.         sum(decode(name,'b',id,0)) id_2,
  4.         sum(decode(name,'c',id,0)) id_3 from t_decode;
复制代码

添加测试:
  1. select
  2.    decode(name,'a',id,0) id_1,
  3.    decode(name,'b',id,0) id_2,
  4.    decode(name,'c',id,0) id_3
  5. from t_decode;
  6. -- 相等于:case when then else end
  7. select
  8.         case name when 'a' then id else 0 end as id_1,
  9.     case name when 'b' then id else 0 end as id_2,
  10.     case name when 'c' then id else 0 end as id_3
  11. from t_decode;
复制代码

4. 联合Lpad函数,怎样使主键的值主动加1并在前面补0
  1. 结合Lpad函数,如何使主键的值自动加1并在前面补0
  2. select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,'0') new_id from t_decode;
复制代码

拆分详细解说:
  1. select * from t_decode
复制代码
  1. select lpad(id,2,0) from t_decode
复制代码
  1. select to_number(id) from t_decode;
复制代码
  1. select max(to_number(id)+1) from t_decode;
复制代码
  1. select decode(count(id),0,1,max(to_number(id)+1)) from t_decode;
复制代码
  1. select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,‘0') new_id from t_decode;
复制代码

以上所述是小编给各人先容的Oracle中decode函数用法,渴望对各人有所帮助。在此也非常感谢各人对脚本之家网站的支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作