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 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|