怎么在oracle中使用decode函数
今天就跟大家聊聊有关怎么在oracle中使用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测试
selectempno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow')asnamefromempwhererownum<=10
输出结果
7369smith7499allen7521ward7566jones7654unknow7698unknow7782unknow7788unknow7839unknow7844unknow
2:使用decode比较大小
select decode(sign(var1-var2),-1,var 1,var2) from dual
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测试
SELECTename,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')))FROMemp
输出结果
SMITH800lowsalALLEN1600lowsalWARD1250lowsalJONES2975lowsalMARTIN1250lowsalBLAKE2850lowsalCLARK2450lowsalSCOTT3000midsalKING5000highsalTURNER1500lowsalADAMS1100lowsalJAMES950lowsalFORD3000midsalMILLER1300lowsal
4:利用decode实现表或者试图的行列转换
sql测试
SELECTSUM(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
输出结果如下
SMITHALLENWARDJONESMARTIN8001600125029751250
5:使用decode函数来使用表达式来搜索字符串
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
sql测试
SELECTENAME,SAL,DECODE(INSTR(ENAME,'S'),0,'不含有s','含有s')ASINFOFROMEMP
输出结果
SMITH800含有sALLEN1600不含有sWARD1250不含有sJONES2975含有sMARTIN1250不含有sBLAKE2850不含有sCLARK2450不含有sSCOTT3000含有sKING5000不含有sTURNER1500不含有sADAMS1100含有sJAMES950含有sFORD3000不含有sMILLER1300不含有s
Decode函数在实际开发中非常的有用
结合Lpad函数,如何使主键的值自动加1并在前面补0
select LPAD(decode(count(记录编号),0,1,max(to_number(记录编号)+1)),14,'0') 记录编号 from tetdmis
eg:
select decode(dir,1,0,1) from a1_interval
dir 的值是1变为0,是0则变为1
比如我要查询某班男生和女生的数量分别是多少?
通常我们这么写:
select count(*) from 表 where 性别 = 男;
select count(*) from 表 where 性别 = 女;
要想显示到一起还要union一下,太麻烦了
用decode呢,只需要一句话
select sum(decode(性别,男,1,0)),sum(decode(性别,女,1,0)) from 表
eg:
selectsum(decode(siteno,'LT',1,0)),sum(decode(siteno,'SZ',1,0))fromfacd605;selectsum(casesitenowhen'LT'then1else0end),sum(casesitenowhen'SZ'then1else0end)fromfacd605;
看完上述内容,你们对怎么在oracle中使用decode函数有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。