oracle中decode函数的使用方法示例
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
sql测试
selectempno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow')asnamefromempwhererownum<=10
输出结果
7369smith 7499allen 7521ward 7566jones 7654unknow 7698unknow 7782unknow 7788unknow 7839unknow 7844unknow
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
Decode函数在实际开发中非常的有用
结合Lpad函数,如何使主键的值自动加1并在前面补0
selectLPAD(decode(count(记录编号),0,1,max(to_number(记录编号)+1)),14,'0')记录编号fromtetdmis
eg:
selectdecode(dir,1,0,1)froma1_interval
dir的值是1变为0,是0则变为1
比如我要查询某班男生和女生的数量分别是多少?
通常我们这么写:
selectcount(*)from表where性别=男;
selectcount(*)from表where性别=女;
要想显示到一起还要union一下,太麻烦了
用decode呢,只需要一句话
selectsum(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函数的使用方法示例的全部内容,希望对大家有所帮助。欢迎参阅:Oracle中游标Cursor基本用法详解、oracle数据库ORA-01196错误解决办法分享、oracle常见故障类别及规划解析等,感谢朋友们对本站的支持!