迅闻网
让更多人看到你

oracle decode函数(oracle decode用法)

  oracledecode函数

一两种语法格式
1decode(expression,value,result1,result2)
如果expression=value,则输出result1,否则输出result2
例子:
(1+2=3,输出a)
(1+2≠4,输出b)
2decode(expression,value1,result1,value2,result2,value3,result3……,default)
如果expression=value1,则输出result1,expression=value2,输出reslut2,expression=value3,输出result3,
若expression不等于所列出的所有value,则输出为default
例子:
(score=100,输出’NO.1’,score=’90’,输出‘NO.2’,score=’70’,输出‘NO.3’,其他值输出’Other’)
二应用
1使用decode函数分段
将成绩表中分数大于90分的分为优秀,80~90分为良好,70~80分为中等,60~70分为及格,60分以下为不及格。
(sign()函数的作用是,判断参数的值大于0则返回1,等于0则返回0,小于0则返回-1;
如图,当socre大于或等于90时,socre-90>=0,sign()函数返回1或0,则输出‘优秀’,
在score-90<0的情况下,再判断socre-80,socre-80>=0,sign()函数返回1或0,则输出‘良好’,
以此类推,用decode()的嵌套配合sign()函数来实现对分数的分段以及相应的输出,
最后60分以下的就default为‘不及格’就可以了,可以看到我们的Tony老师的分数就不及格了)
2使用decode函数对表做行列转换
如图所示,有一张三个科目的成绩表,各科目名称和相应的分数呈现在行中,
现想将各科目名称转换为列名,每列的内容为对应科目的分数。
(如图,先用decode函数判断subject为Chinese时,输出score,不为Chinese时,输出为NULL,
因为共有三个科目,所以输出其中一个科目的分数时,其他科目的分数为NULL,这里只需要
用sum()函数来实现聚合的作用,将空值去除掉就可以了)
(sum()函数分别将name为John的每个列的值相加,如Chinese列,80+NULL+NULL=80,
再将name为Will的每个列的值相加,然后groupby将name分组,最终达到如上图聚合的效果)

 

oracle

oracledecode用法

decode的几种用法
1:使用decode判断字符串是否一样
DECODE(value,if1,then1,if2,then2,if3,then3,…,else)
含义为
IF条件=值1THEN
RETURN(value1)
ELSIF条件=值2THEN
RETURN(value2)
……
ELSIF条件=值nTHEN
RETURN(value3)
ELSE
RETURN(default)
ENDIF
2:使用decode比较大小
selectdecode(sign(var1-var2),-1,var1,var2)fromdual
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
sql测试
selectdecode(sign(100-90),-1,100,90)fromdual
输出结果
90
100-90=10>0则会返回1,所以decode函数最终取值为90
反正
selectdecode(sign(100-90),1,100,90)fromdual
输出结果
100
100-90=10>0返回1,判断结果为1,返回第一个变量100,最终输出结果为100
3:使用decode函数分段
工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为低薪
sql测试
SELECT
ename,sal,
DECODE(SIGN(sal-5000),
1,
‘highsal’,
0,
‘highsal’,
-1,
DECODE(SIGN(sal-3000),
1,
‘midsal’,
0,
‘midsal’,
-1,
DECODE(SIGN(sal-1000),
1,
‘lowsal’,
0,
‘lowsal’,
-1,
‘lowsal’)))
FROM
emp
输出结果
SMITH800lowsal
ALLEN1600lowsal
WARD1250lowsal
JONES2975lowsal
MARTIN1250lowsal
BLAKE2850lowsal
CLARK2450lowsal
SCOTT3000midsal
KING5000highsal
TURNER1500lowsal
ADAMS1100lowsal
JAMES950lowsal
FORD3000midsal
MILLER1300lowsal
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))MARTINFROMEMP
输出结果如下
SMITHALLENWARDJONESMARTIN
8001600125029751250
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’)ASINFO
FROM
EMP
输出结果
SMITH800含有s
ALLEN1600不含有s
WARD1250不含有s
JONES2975含有s
MARTIN1250不含有s
BLAKE2850不含有s
CLARK2450不含有s
SCOTT3000含有s
KING5000不含有s
TURNER1500不含有s
ADAMS1100含有s
JAMES950含有s
FORD3000不含有s
MILLER1300不含有s。

未经允许不得转载:迅闻网 » oracle decode函数(oracle decode用法)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

迅闻网-让更多人看到你

登录/注册返回首页