oracle数据库中decode函数用法及使用场景

1 篇文章 0 订阅
1 篇文章 0 订阅

decode函数

DECODE函数是Oracle数据库中的一种条件判断函数,它提供了一种简洁而强大的方式来实现基于条件的数据转换。通过DECODE函数,我们可以根据指定的条件进行值的比较,然后返回符合条件的结果值。

一、decode函数的两种形式

第一种形式

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

该函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    …
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

第二种形式

decode(字段或字段的运算,值1,值2,值3)

这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多
扩展:
sign()函数

解释:
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
用法示例:

select id,sign(id-2) from t_decode;

lpad()函数
在字段id前边补字段0 长度为2

select lpad(id,2,0) from t_decode;

二、decode的一些工作常用思路总结

1、准备测试数据:
创建测试表t_decode,并插入测试数据//创建表,插入数据,查询

create table t_decode(
       id integer,
       name varchar2(10)
);
 
//插入数据
insert into t_decode values (1,'a');
insert into t_decode values (2,'b');
insert into t_decode values (3,'c');
insert into t_decode values (4,'a');

数据样式
在这里插入图片描述

2、第一种形式decode函数的常用思路

①. 简单使用:判断字符串

select id,name,
    decode(id,1,'第一个',2,'第二个',3,'第三个','没有') new_id 
from t_decode;

在这里插入图片描述
②.使用decode函数分段
判断表中id大小并根据大小划分不同范围
(-,2) low
[2,4) mid
[4,-] high

select id,name,
   decode(sign(id - 4),1,'high id',0,'high id','-1',
   decode(sign(id - 2),1,'mid id',0,'mid id',-1,'low id'))
from t_decode;

在这里插入图片描述
3、第二种形式decode函数的常用思路
①. 比较大小

-- 比较大小
select decode(sign(100-90),-1,100,90) from dual;

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

判断name中是否含有a?

select id,name,decode(instr(name,'a'),0,'不含有a','含有a') as info from t_decode;

在这里插入图片描述
③. 实现行列转换

注意:decode相当于:case when then else end语句

select 
    sum(decode(name,'a',id,0)) id_1,
    sum(decode(name,'b',id,0)) id_2,
    sum(decode(name,'c',id,0)) id_3 from t_decode;`

在这里插入图片描述

select 
   decode(name,'a',id,0) id_1,
   decode(name,'b',id,0) id_2,
   decode(name,'c',id,0) id_3 
from t_decode;
 
-- 相等于:case when then else end
select 
    case name when 'a' then id else 0 end as id_1,
    case name when 'b' then id else 0 end as id_2,
    case name when 'c' then id else 0 end as id_3 
from t_decode;

在这里插入图片描述
④. 结合Lpad函数,如何使主键的值自动加1并在前面补0

结合Lpad函数,如何使主键的值自动加1并在前面补0

select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,'0') new_id from t_decode;

在这里插入图片描述
拆分详细讲解(参考下面第1个链接)

转载链接:https://blog.csdn.net/AlbenXie/article/details/102700059
https://blog.csdn.net/u010405836/article/details/135073827

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值