decode(字段|表达式,条件1,结果1,条件2,结果2,...,条件n,结果n,缺省值); --缺省值可以省略
表示如果 字段|表达式 等于 条件1 时,DECODE函数的结果返回 条件1 ,...,如果不等于任何一个条件值,则返回缺省值。
【注意】:decode 函数 ,只能在select 语句用。
decode 函数 用法:
1.使用decode 判断字符串是否一样
sql 测试:
1 select empno, 2 decode(empno, 3 7369,'smith', 4 7499,'allen', 5 7521,'ward', 6 7566,'jones', 7 'unknow') as name 8 from emp 9 where rownum<=10;
2.使用decode 函数比较大小
输出两个数中的较小值:
select decode(sign(var1-var2),-1,var 1,var2) from dual
示例:
select decode(sign(100-90),-1,100,90) from dual;
3.使用decode 函数分段
设 工资大于等于5000为高薪,大于等于3000且小于5000为中薪,低于3000为低薪 则每个人的工资水平是...?
1 select e.ename ,e.sal, 2 decode(sign(e.sal-5000), 3 1, 'high sal', 4 0, 'hign sal', 5 -1, 6 decode(sign(e.sal-3000), 7 1, 'mid sal', 8 0, 'mid sal', 9 -1,'low sal' 10 ) 11 ) 12 as "工资等级" 13 from scott.emp e;
(4,5还没掌握)
4.利用decode实现表或者试图的行列转换
1 select 2 sum(decode(e.ename,upper('smith'),sal,0)) smith, 3 sum(decode(e.ename,upper('allen'),sal,0)) allen, 4 sum(decode(e.ename,upper('ward'),sal,0)) ward, 5 sum(decode(e.ename,upper('jones'),sal,0)) jones, 6 sum(decode(e.ename,upper('martin'),sal,0)) martin 7 from scott.emp e ;
sum 函数的用法 ?
5.使用decode函数来使用表达式来搜索字符串
decode函数 比较表达式和搜索字。如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
1 select 2 sum(decode(e.ename,upper('smith'),sal,0)) smith, 3 sum(decode(e.ename,upper('allen'),sal,0)) allen, 4 sum(decode(e.ename,upper('ward'),sal,0)) ward, 5 sum(decode(e.ename,upper('jones'),sal,0)) jones, 6 sum(decode(e.ename,upper('martin'),sal,0)) martin 7 from scott.emp e ;