Oracle中decode函数用法
本文详细讲解了Oracle中decode函数的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1.decode函数的两种形式
第一种形式
含义解释:
decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
该函数的含义如下:
1 2 3 4 5 6 7 8 9 10 | 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
用法示例:
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 3 4 5 6 7 8 9 10 11 | //创建表,插入数据,查询 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. 简单使用:判断字符串
1 2 3 | select id, name , decode(id,1, '第一个' ,2, '第二个' ,3, '第三个' , '没有' ) new_id from t_decode; |
2.使用decode函数分段
判断表中id大小并根据大小划分不同范围
(-,2) low
[2,4) mid
[4,-] high
1 2 3 4 | 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. 比较大小
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. 实现行列转换
注意:decode相当于:case when then else end语句
1 2 3 4 | 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; |
添加测试:
1 2 3 4 5 6 7 8 9 10 11 12 | 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
1 2 | 结合Lpad函数,如何使主键的值自动加1并在前面补0 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函数用法
原文链接:https://blog.csdn.net/qichangjian/article/details/88975499