前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle中decode函数用法解析以及常用场景「建议收藏」

Oracle中decode函数用法解析以及常用场景「建议收藏」

作者头像
全栈程序员站长
发布2022-09-15 09:15:37
3.7K0
发布2022-09-15 09:15:37
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

1.decode函数的两种形式
第一种形式

含义解释: decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

该函数的含义如下:

代码语言:javascript
复制
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

用法示例:

代码语言:javascript
复制
select id,sign(id-2) from t_decode;

截图效果:

在这里插入图片描述
在这里插入图片描述
lpad()函数

在字段id前边补字段0 长度为2

代码语言:javascript
复制
select lpad(id,2,0) from t_decode;
在这里插入图片描述
在这里插入图片描述
2.decode的一些工作常用思路总结
a.准备测试数据

创建测试表t_decode,并插入测试数据

代码语言:javascript
复制
//创建表,插入数据,查询
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');

数据样式

在这里插入图片描述
在这里插入图片描述
b.第一种形式decode函数的常用思路
1. 简单使用:判断字符串
代码语言:javascript
复制
select id,name,
	decode(id,1,'第一个',2,'第二个',3,'第三个','没有') new_id 
from t_decode;
在这里插入图片描述
在这里插入图片描述
2.使用decode函数分段

判断表中id大小并根据大小划分不同范围 (-,2) low [2,4) mid [4,-] high

代码语言:javascript
复制
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; 
在这里插入图片描述
在这里插入图片描述
c.第二种形式decode函数的常用思路
1. 比较大小
代码语言:javascript
复制
-- 比较大小
select decode(sign(100-90),-1,100,90) from dual;
在这里插入图片描述
在这里插入图片描述
2. 使用表达式来搜索字符串

判断name中是否含有a?

代码语言:javascript
复制
select id,name,decode(instr(name,'a'),0,'不含有a','含有a') as info from t_decode;
在这里插入图片描述
在这里插入图片描述
3. 实现行列转换

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

代码语言:javascript
复制
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;
在这里插入图片描述
在这里插入图片描述

添加测试:

代码语言:javascript
复制
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;
在这里插入图片描述
在这里插入图片描述
4. 结合Lpad函数,如何使主键的值自动加1并在前面补0
代码语言:javascript
复制
结合Lpad函数,如何使主键的值自动加1并在前面补0
select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,'0') new_id from t_decode;
在这里插入图片描述
在这里插入图片描述

拆分详细讲解

select * from t_decode

在这里插入图片描述
在这里插入图片描述

select lpad(id,2,0) from t_decode

在这里插入图片描述
在这里插入图片描述

select to_number(id) from t_decode;

在这里插入图片描述
在这里插入图片描述

select max(to_number(id)+1) from t_decode;

在这里插入图片描述
在这里插入图片描述

select decode(count(id),0,1,max(to_number(id)+1)) from t_decode;

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160064.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.decode函数的两种形式
    • 第一种形式
      • 第二种形式
        • sign()函数
          • lpad()函数
          • 2.decode的一些工作常用思路总结
            • a.准备测试数据
              • b.第一种形式decode函数的常用思路
                • 1. 简单使用:判断字符串
                • 2.使用decode函数分段
              • c.第二种形式decode函数的常用思路
                • 1. 比较大小
                • 2. 使用表达式来搜索字符串
                • 3. 实现行列转换
                • 4. 结合Lpad函数,如何使主键的值自动加1并在前面补0
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档