语法: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函数等价于cash when语句,只不过当条件比较多时,decode函数书写起来比较简洁一点而已
前期表准备:
1.查询数据,sex字段 1表示男生,2表示女生
select t.id,
t.name,
t.age,
decode(t.sex, '1', '男生' , '2', '女生', '其他') as sex
from student_test t
2.decode比较大小
备注:sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1
需求:年龄在12岁以上的显示12以上,12以下的显示12以下,12的显示正好12
select t.id,
t.name,
t.age,
decode(sign(t.age-12),1,'12以上',-1,'12以下',0,'正好12') as age_desc,
t.sex
from student_test t
需求:age在13以上的为高龄,11-13的为中龄,11以下的为低龄
select t.id,
t.name,
t.age,
decode(sign(t.age - 13),
1,
'高龄',
0,
'高龄',
'-1',
decode(sign(t.age - 11), 1, '中龄', 0, '中龄', -1, '低龄')) as age_desc,
t.sex
from student_test t
3.搜索字符串
需求:找到含有三的姓名
select t.id,
t.name,
decode(instr(t.name, '三'), '0', '名字中不含三', '名字中含有三') nama_desc,
t.age,
t.sex
from student_test t
需求:判断是否为空
表数据:
select t.id,
t.name,
t.age,
decode(t.sex, null, '暂无数据', t.sex) sex
from student_test t