http://blog.csdn.net/weeknd/article/details/71157044
decode的几种用法
1:使用decode判断字符串是否一样
DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
含义为
IF 条件=值1 THEN
RETURN(value 1)
ELSIF 条件=值2 THEN
RETURN(value 2)
......
ELSIF 条件=值n THEN
RETURN(value 3)
ELSE
RETURN(default)
END IF
sql测试
select empno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow') as name from emp where rownum<=10
输出结果
7369 smith
7499allen
7521ward
7566jones
7654unknow
769877827788783978442:使用decode比较大小
select decode(sign(var1-var2),-1,var 1,var2) from dual
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
select decode(sign(100-90),100,90) from dual
90
100-90=10>0 则会返回1,所以decode函数最终取值为90
反正
100
100-90=10>0返回1,判断结果为1,返回第一个变量100,最终输出结果为100
3:使用decode函数分段
工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为低薪
SELECT
ename,sal,
DECODE(SIGN(sal - 5000),255);"> 1,255);"> 'high sal',255);"> 0,255);"> - 1,255);"> DECODE(SIGN(sal - 3000),255);"> 1,255);"> 'mid sal',255);"> 0,255);"> - 1,255);"> DECODE(SIGN(sal - 1000),255);"> 1,255);"> 'low sal',255);"> 0,255);"> - 1,255);"> 'low sal')))
FROM
emp
SMITH 800 low sal
ALLEN1600WARD1250JONES2975MARTINBLAKE 2850CLARK2450SCOTT3000mid sal
KING5000high sal
TURNER1500ADAMS1100JAMES950 low sal
FORDMILLER13004:利用decode实现表或者试图的行列转换
SUM(DECODE(ENAME,'SMITH',SAL,0)) SMITH,'ALLEN',0)) ALLEN,'WARD',0)) WARD,'JONES',0)) JONES,'MARTIN',0)) MARTIN FROM EMP
输出结果如下
SMITH ALLEN WARD JONES MARTIN
800 1250 2975 1250
5:使用decode函数来使用表达式来搜索字符串
decode (expression,search_1,result_1,search_2,result_2,....,search_n,result_n,default)
decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
ENAME,255);"> SAL,255);"> DECODE(INSTR(ENAME,'S'),255);"> '不含有s',255);"> '含有s') AS INFO
EMP
SMITH800 含有s
不含有s
含有s
BLAKE 不含有s