1.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;
复制代码
2.decode的一些工作常用思路总结
a.准备测试数据
创建测试表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');
复制代码
数据样式
b.第一种情势decode函数的常用思路
1. 简朴使用:判断字符串
- select id,name,
- decode(id,1,'第一个',2,'第二个',3,'第三个','没有') new_id
- from t_decode;
复制代码
2.使用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;
复制代码
c.第二种情势decode函数的常用思路
1. 比较巨细
- -- 比较大小
- select decode(sign(100-90),-1,100,90) from dual;
复制代码
2. 使用表达式来搜索字符串
判断name中是否含有a?- select id,name,decode(instr(name,'a'),0,'不含有a','含有a') as info from t_decode;
复制代码
3. 实现行列转换
- 注意: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;
复制代码
4. 联合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;
复制代码
拆分详细解说:复制代码
- 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;
复制代码
以上所述是小编给各人先容的Oracle中decode函数用法,渴望对各人有所帮助。在此也非常感谢各人对脚本之家网站的支持! |