DECODE含义
decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
这个是decode的表达式,具体的含义解释为:
IF条件=值1THEN
RETURN(翻译值1)
ELSIF条件=值2THEN
RETURN(翻译值2)
......
ELSIF条件=值nTHEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
ENDIF
DECODE的用法
这里主要说的就是decode的用法,在很多时候这个函数还是很有用的。
1.翻译值
数据截图:
打开UC浏览器查看更多精彩图片
打开百度APP,查看更多高清图片
需求:查询出的数据,1表示男生,2表示女生
selectt.id,
t.name,
t.age,
decode(t.sex,'1','男生','2','女生','其他')assex
fromSTUDENT2t
结果:
打开UC浏览器查看更多精彩图片
2.decode比较大小
说明:sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1
数据:
打开UC浏览器查看更多精彩图片
需求:年龄在20以上的显示20以上,20以下的显示20以下,20的显示正好20
selectt.id,
t.name,
t.age,
decode(sign(t.age-20),
1,
'20以上',
-1,
'20以下',
0,
'正好20',
'未知')assex
fromSTUDENT2t
结果:
打开UC浏览器查看更多精彩图片
3.decode分段
数据暂无
需求:工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为底薪
selectname,
sal,
decode(sign(sal-5000),
1,
'高薪',
0,
'高薪',
-1,
decode(sign(sal-3000),1,'中等',0,'中等',-1,'低薪'))assalname
fromperson;
结果暂无
4.搜索字符串
数据:
打开UC浏览器查看更多精彩图片
需求:找到含有三的姓名
selectt.id,
decode(instr(t.name,'三'),0,'姓名不含有三','姓名含有三')asname,
t.age,
t.sex
fromSTUDENT2t
结果:
打开UC浏览器查看更多精彩图片
5.判断是否为空
数据:
打开UC浏览器查看更多精彩图片
需求:性别为空显示“暂无数据”,不为空原样输出
selectt.id,
t.name,
t.age,
decode(t.sex,NULL,'暂无数据',t.sex)assex
fromSTUDENT2t
结果:
打开UC浏览器查看更多精彩图片
总结:decode在书写sql的时候还是挺有用的,常用的应该是1和5了吧(我猜的,因为我就是经常用这两种)