decode函数

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

7499 allen

7521 ward

7566 jones

7654 unknow

7698 unknow

7782 unknow

7788 unknow

7839 unknow

7844 unknow




2:使用decode比较大小
select decode(sign(var1-var2),-1,var 1,var2) from dual

sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

sql测试

select decode(sign(100-90),-1,100,90) from dual

输出结果

90

100-90=10>0 则会返回1,所以decode函数最终取值为90

反正

select decode(sign(100-90),1,100,90) from dual

输出结果

100

100-90=10>0返回1,判断结果为1,返回第一个变量100,最终输出结果为100




3:使用decode函数分段
工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为低薪

sql测试

SELECT 

    ename,sal,

    DECODE(SIGN(sal - 5000),

            1,

            ‘high sal’,

            0,

            ‘high sal’,

            - 1,

            DECODE(SIGN(sal - 3000),

                    1,

                    ‘mid sal’,

                    0,

                    ‘mid sal’,

                    - 1,

                    DECODE(SIGN(sal - 1000),

                            1,

                            ‘low sal’,

                            0,

                            ‘low sal’,

                            - 1,

                            ‘low sal’)))

FROM

    emp

输出结果

SMITH   800  
low sal

ALLEN 1600
low sal

WARD 1250
low sal

JONES 2975
low sal

MARTIN 1250
low sal

BLAKE   2850
low sal

CLARK 2450
low sal

SCOTT 3000
mid sal

KING  5000
high sal

TURNER 1500
low sal

ADAMS 1100
low sal

JAMES 950
        low sal

FORD 3000
mid sal

MILLER 1300
low sal


4:利用decode实现表或者试图的行列转换
sql测试

SELECT 

       SUM(DECODE(ENAME,‘SMITH’,SAL,0))  SMITH,

       SUM(DECODE(ENAME,‘ALLEN’,SAL,0))  ALLEN,

       SUM(DECODE(ENAME,‘WARD’,SAL,0))   WARD,

       SUM(DECODE(ENAME,‘JONES’,SAL,0))  JONES,

       SUM(DECODE(ENAME,‘MARTIN’,SAL,0)) MARTIN FROM EMP

输出结果如下

SMITH  ALLEN  WARD   JONES  MARTIN

  800  1600
  1250       2975       1250


5:使用decode函数来使用表达式来搜索字符串
decode (expression, search_1, result_1, search_2, result_2, …, search_n, result_n, default)

decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。

sql测试

SELECT 

    ENAME,

    SAL,

    DECODE(INSTR(ENAME, ‘S’),

            0,

            ‘不含有s’,

            ‘含有s’) AS INFO

FROM

    EMP

输出结果

SMITH 800
          含有s

ALLEN 1600
  不含有s

WARD 1250
  不含有s

JONES 2975
   含有s

MARTIN 1250
   不含有s

BLAKE 2850
   不含有s

CLARK 2450
   不含有s

SCOTT 3000
  含有s

KING 5000
  不含有s

TURNER 1500
  不含有s

ADAMS 1100
  含有s

JAMES 950
           含有s

FORD 3000
  不含有s

MILLER 1300
  不含有s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值