decode()函数简介:主要作用将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);
使用方法:Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
SQL> select * from student0 for update;
ID NAME SEX CLASS
-------------------- -------------------- -------------------- --------------------
1 苏苏苏学志辉= 1 一年级
2 李静博 1 一年级
3 沈娇娇 0 二年级
4 陈晓丽 0 二年级
SQL> Select id,name,decode(sex,1,'男',0,'女'),class from student0;
ID NAME DECODE(SEX,1,'男',0,'女') CLASS
-------------------- -------------------- ----------------------- --------------------
1 苏苏苏学志辉= 男 一年级
2 李静博 男 一年级
3 沈娇娇 女 二年级
4 陈晓丽 女 二年级
DECODE含义
decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
这个是decode的表达式,具体的含义解释为:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
DECODE的用法
这里主要说的就是decode的用法,在很多时候这个函数还是很有用的。
select t.* from student0 t;
ID NAME SEX CLASS
1 苏学志 1 一年级
2 李静博 1 一年级
3 沈娇娇 0 二年级
4 陈晓丽 0 二年级
select t.id,t.name,decode(t.sex,'1','男生','0','女生','不男不女') as sex ,t.class from student0 t;
ID NAME SEX CLASS
1 苏学志 男生 一年级
2 李静博 男生 一年级
3 沈娇娇 女生 二年级
4 陈晓丽 女生 二年级
2.decode比较大小
注释:修改student0表 增加age字段 默认10;
alter table student0 add (age int default 10);
SQL> select * from student0 for update;
ID NAME SEX CLASS AGE
-------------------- -------------------- -------------------- -------------------- --------------------
1 苏学志 1 一年级 10
2 李静博 1 一年级 20
3 沈娇娇 0 二年级 80
4 陈晓丽 0 二年级 90
SQL>
拓展 说明:sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1 ,SQL数学函数SIGN 在进行SQL查询时,我们通常会有这样一种需求,对一个自然数进行判断,如果为零,返回0,如果为负数,统一返回-1,如果为正数,统一返回1。这时就需要 sign() 函数的支持,下面为具体用法:一、SIGN(X)返回参数作为-1、0或1的符号,该符号取决于X的值为负、零或正。SELECT SIGN(-32); -> -1
SELECT SIGN(0); -> 0
SELECT SIGN(234); -> 1
需求:年龄在80以上的显示80以上,80以下的显示80以下,80的显示正好80
SQL> select * from student0;
ID NAME SEX CLASS AGE
-------------------- -------------------- -------------------- -------------------- ---------------------------------------
1 苏学志 1 一年级 10
2 李静博 1 一年级 20
3 沈娇娇 0 二年级 80
4 陈晓丽 0 二年级 90
SQL>
SQL> select t.id,t.name,t.sex,t.class,decode(sign(age-80),'1','80以上','-1','80以下','0','正好90') as sex from student0 t;
ID NAME SEX CLASS SEX
-------------------- -------------------- -------------------- -------------------- ------
1 苏学志 1 一年级 80以下
2 李静博 1 一年级 80以下
3 沈娇娇 0 二年级 正好90
4 陈晓丽 0 二年级 80以上
SQL>
需求:查找带有'娇'字的学生
select t.id,decode(instr(t.name,'娇'),'0','不含有娇','含有娇'),t.sex,t.age from student0 t;
SQL> select t.* from student0 t where instr(t.name,'娇')>0 ;
ID NAME SEX CLASS AGE
-------------------- -------------------- -------------------- -------------------- ---------------------------------------
3 沈娇娇 0 二年级 80
结果
select t.id,decode(instr(t.name,'娇'),'0','不含有娇','含有娇') as name,t.sex,t.age from student0 t;
ID NAME SEX AGE
-------------------- -------- -------------------- ---------------------------------------
1 不含有娇 1 10
2 不含有娇 1 20
3 含有娇 0 80
4 不含有娇 0 90
5.判断是否为空
SQL> select t.id,t.name,decode(t.age,NULL,'暂无数据',t.age) as age,t.sex,t.class from student0 t;
ID NAME AGE SEX CLASS
-------------------- -------------------- ---------------------------------------- -------------------- --------------------
1 苏学志 暂无数据 1 一年级
2 李静博 20 1 一年级
3 沈娇娇 80 0 二年级
4 陈晓丽 90 0 二年级