文章来源:decode函数的使用
decode的几种用法
1.使用decode判断字符串是否一样
decode(value,if 1,then 1,if 2,then 2,if 3,then 3,……,else)
含义为:
if 条件 = 值1 then
return(value 1)
if 条件 = 值2 then
return(value 2)
if 条件 = 值3 then
return(value 3)
……
else
return(default)
end if
栗子:
>select empno,decode(empno,7396,'smith',7499,'allen',7521,'ward',7566,'jones','unknow') as name from emp where rownum <= 6;
>7369 smith
7499 allen
7521 ward
7566 jones
7654 unknow
7698 unknow
2.使用decode比较大小
如下,和min
起的作用是一样的。
select decode (sign(var1-var2),-1,var1,var2) from dual
其中 sign
是符号函数,若函数内为负数返回-1,若为正数返回1,若为0返回0.若把-1改为1,则作用和max
相同。
栗子:
# 取小的数
>select decode(sign(100-90),-1,100,90) from daul;
>90
#取大的数
>select decode(sign(100-90),1,100,90);
>100
3.使用decode函数分段
工资大于等于10000为高薪,小于10000且大于等于5000为中等,工资小于5000且大于等于1000为低薪,小于1000为极低薪。
栗子
>select ename,sal,
decode(sign(sal-10000),
1,'high sal',
0,'high sal',
-1,decode(sign(sal-5000),
1,'mid sal',
0,'mid sal',
-1,decode(sign(sal-1000),
1,'low sal',
0,'low sal',
-1,'best low sal')))
from emp;
>smith 800 best low sal
allen 1600 low sal
ward 5200 mid sal
jones 15300 high sal
james 5000 mid sal
4.利用decode实现表或者视图的行列转换
栗子
>select
sum(decode(ename,'smith',sal,0) smith,
sum(decode(ename,'allen',sal,0) allen,
sum(decode(ename,'ward',sal,0) ward,
from emp;
> smith allen ward
800 1600 5200
5.使用decode函数根据表达式来搜索字符串
使用方法decode(expression,search_1,result_1,search_2,result_2,……,search_n,result_n,default)
其中decode
函数用来比较表达式,和搜索字符串,如果匹配,则返回结果;如果不匹配,返回default
值;如果未定义default
值,则返回空值。
栗子
>select ename,
decode(instr(ename,'s'),0,'不含有s','含有s') as info
from emp;
>smith 含有s
allen 不含有s
ward 不含有s
#over,明天写窗口函数。