微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

oracle decode函数的使用

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

原文地址:https://www.jb51.cc/oracle/206395.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐