oracle最强大函数之一decode函数的使用[通俗易懂]

发布时间:2025-12-09 14:09:16 浏览次数:3

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

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477