MySql的if函数和Oracle的decode函数
MySql的if函数和Oracle的decode函数
Oracle的decode函数
用法1含义:
decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
解释:条件满足值1,则返回值1,满足值2,则返回值2,以此类推
用法2含义:
decode(字段或字段的运算,值1,值2,值3)
解释:这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
MySQL的IF函数
IF(expr1,expr2,expr3)
解释:如果 满足expr1 (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
使用场景
1.翻译值
需求:查询出的数据,1表示男生,2表示女生
--Oracle
select t.id,
t.name,
t.age,
decode(t.sex, '1', '男生', '2', '女生', '其他') as sex
from STUDENT2 t
--MySql
select t.id,
t.name,
t.age,
if(t.sex ='1','男生',
if(t.sex='2','女生','其他')) as sex
from STUDENT2 t
2.比较大小
说明:sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1
需求:年龄在20以上的显示20以上,20以下的显示20以下,20的显示正好20
--Oracle
select t.id,
t.name,
t.age,
decode(sign(t.age - 20),
1,
'20以上',
-1,
'20以下',
0,
'正好20',
'未知') as sex
from STUDENT2 t
--MySql
select t.id,
t.name,
t.age,
if(t.age-20>0,'20以上',(
if(t.age-20<0,'20以下',
if(t.age-20=0,'正好20','未知')))) as sex
from STUDENT2 t
3.搜索字符串
需求:找到含有三的姓名
--Oracle
select t.id,
decode(instr(t.name, '三'), 0, '姓名不含有三', '姓名含有三') as name,
t.age,
t.sex
from STUDENT2 t
--MySql
select t.id,
if(instr(t.name, '三')=0,'姓名不含有三', '姓名含有三') as name,
t.age,
t.sex
from STUDENT2 t

浙公网安备 33010602011771号