千家信息网

oracle中case和decode如何使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关oracle中case和decode如何使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。总结:DECODE 与CASE WHEN
千家信息网最后更新 2026年11月02日oracle中case和decode如何使用

这期内容当中小编将会给大家带来有关oracle中case和decode如何使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

总结:

DECODE 与CASE WHEN 的比较

1.DECODE 只有Oracle 才有,其它数据库不支持;

2.CASE WHEN的用法, Oracle、SQL Server、 MySQL 都支持;

3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE when可用于=,>=,<,<=,<>,is null,is not null 等的判断;

4.DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;

5.另外,在decode中,null和null是相等的,但在case when中,只能用is null来判断;decode函数还能用于行转列。

一、case表达式用法:
case when

case when 类似我们的if ...then..else ,判断语句

语法如下:

CASE expr WHEN expr1 THEN return_expr1

[WHEN expr2 THEN return_expr2

...

WHEN exprn THEN return_exprn

ELSE else_expr]

END

第二种延伸用法:

CASE

WHEN expr1 THEN return_expr1

[WHEN expr2 THEN return_expr2

....

WHEN exprn THEN return_exprn

ELSE else_expr]

END
-- 如果部门编号为10的,显示为sal*1.1

-- 如果部门编号为20的,显示为sal*1.2

-- 如果部门编号为30的,显示为sal*1.3

-- 否则显示为sal

-- 这一列查询的结果,列名显示为 isal
SQL> select ename,deptno,sal,case deptno when 10 then sal*1.1

2 when 20 then sal*1.2

3 when 30 then sal*1.3

4 else sal

5 end isal from test_emp;

ENAME DEPTNO SAL ISAL
---------- ---------- ---------- ----------

AAAABC

SMITH 20 800 960

ALLEN 30 1600 2080

WARD 30 1250 1625

JONES 20 2975 3570

MARTIN 30 1250 1625

BLAKE 30 2850 3705

CLARK 10 2450 2695

SCOTT 20 3002 3602.4

KING 10 5000 5500

TURNER 30 1500 1950

ADAMS 20 1100 1320

JAMES 30 950 1235

FORD 20 3000 3600

MILLER 10 1300 1430

15 rows selected.

第二种写法:
SQL> select ename,deptno,sal,case when deptno=10 then sal*1.1

2 when deptno=20 then sal*1.2

3 when deptno=30 then sal*1.3

4 else sal

5 end isal from test_emp;

ENAME DEPTNO SAL ISAL
---------- ---------- ---------- ----------

AAAABC

SMITH 20 800 960

ALLEN 30 1600 2080

WARD 30 1250 1625

JONES 20 2975 3570

MARTIN 30 1250 1625

BLAKE 30 2850 3705

CLARK 10 2450 2695

SCOTT 20 3002 3602.4

KING 10 5000 5500

TURNER 30 1500 1950

ADAMS 20 1100 1320

JAMES 30 950 1235

FORD 20 3000 3600

MILLER 10 1300 1430

15 rows selected.

case不等值表达式的用法:

SQL> select ename,deptno,sal,case when sal<2000 then sal+200

2 when sal between 2000 and 3000 then sal+100

3 else sal

4 end isal from test_emp;

ENAME DEPTNO SAL ISAL
---------- ---------- ---------- ----------

AAAABC

SMITH 20 800 1000

ALLEN 30 1600 1800

WARD 30 1250 1450

JONES 20 2975 3075

MARTIN 30 1250 1450

BLAKE 30 2850 2950

CLARK 10 2450 2550

SCOTT 20 3002 3002

KING 10 5000 5000

TURNER 30 1500 1700

ADAMS 20 1100 1300

JAMES 30 950 1150

FORD 20 3000 3100

MILLER 10 1300 1500

15 rows selected.


case用于判断空值,避免使用空值函数
SQL> select ename,sal,comm,case when comm is null then sal else sal+comm end isal from emp;

ENAME DEPTNO SAL ISAL
---------- ---------- ---------- ----------

AAAABC

SMITH 800 800

ALLEN 1600 300 1900

WARD 1250 500 1750

JONES 2975 2975

MARTIN 1250 1400 2650

BLAKE 2850 2850

CLARK 2450 2450

SCOTT 3002 3002

KING 5000 5000

TURNER 1500 0 1500

ADAMS 1100 1100

JAMES 950 950

FORD 3000 3000

MILLER 1300 1300

15 rows selected.

二、decode函数用法
语法:

DECODE(col|expression, search2, result1

[, search3, result2,...,]

...

[, searchn, resultn,...,]

[, default])

如果 条件=值1,那么显示结果1

如果 条件=值2,那么显示结果2

....

如果 条件=值n,那么显示结果n

都不符合,则显示缺省值
decode函数等值表达式的用法,与上面case表达式用法相比简便一些:
SQL> select ename,deptno,sal,decode(deptno,10,1.1*sal,20,1.2*sal,30,1.3*sal)isal from emp;
ENAME DEPTNO SAL ISAL
---------- ---------- ---------- ----------
AAAABC
SMITH 20 800 960
ALLEN 30 1600 2080
WARD 30 1250 1625
JONES 20 2975 3570
MARTIN 30 1250 1625
BLAKE 30 2850 3705
CLARK 10 2450 2695
SCOTT 20 3002 3602.4
KING 10 5000 5500
TURNER 30 1500 1950
ADAMS 20 1100 1320
JAMES 30 950 1235
FORD 20 3000 3600
MILLER 10 1300 1430
15 rows selected.
注:decode不能用于非等值用法。

延伸用法:与sign函数联用比较大小

注:sign()函数根据参数1的值是0、正数还是负数,分别返回0、1、-1

select ename,sal,decode(sign(sal-2000),1, '>2000 ',-1, '<2000 ', '=2000 ') sal_level

from emp;

ENAME SAL SAL_LEVEL

-------------------- ---------- -----------

SMITH 800 <2000

ALLEN 1600 <2000

WARD 1250 <2000

JONES 2975 >2000

MARTIN 1250 <2000

BLAKE 2850 >2000

CLARK 2450 >2000

SCOTT 3000 >2000

KING 5000 >2000

TURNER 1500 <2000

ADAMS 1100 <2000

JAMES 950 <2000

FORD 3000 >2000

MILLER 1300 <2000

decode函数用于行转列的转换

SQL> select to_char(hiredate,'yyyy') from emp;

TO_C

----
1980

1981

1981

1981

1981

1981

1981

1987

1981

1981

TO_C

----

1987

1981

1981

1982

15 rows selected.

SQL> select to_char(hiredate,'yyyy'),count(*) from emp group by to_char(hiredate,'yyyy');

TO_C COUNT(*)

---- ----------

1

1987 2

1980 1

1982 1

1981 10

SQL> select sum(decode(to_char(hiredate,'yyyy'),'1980',1))"1980",sum(decode(to_char(hiredate,'yyyy'),'1981',1))"1981",
sum(decode(to_char(hiredate,'yyyy'),'1987',1))"1987",sum(decode(to_char(hiredate,'yyyy'),'1982',1))"1982" from emp;

1980 1981 1987 1982

---------- ---------- ---------- ----------

1 10 2 1

上述就是小编为大家分享的oracle中case和decode如何使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

函数 结果 表达式 条件 部门 内容 语法 分析 支持 复杂 简便 简洁 专业 中小 内容丰富 写法 参数 只有 大小 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 今日互联网科技 没上市的科技互联网公司 互联网 科技创新 世界互联网领先科技成果 智慧科技互联网 撒么互联网科技公司 美国互联网前沿科技 甘肃拓世互联网科技有限公司 昭通云南众福互联网科技有限公司 崇明区互联网教育科技诚信经营 乌鲁木齐新华智原互联网科技学校 互联网科技的全部知识 美国互联网科技实力 江苏苏星互联网科技有限公司 本届互联网大会上的黑科技 万物互联网智能科技 唯美互联网科技 安徽零酒互联网科技有限公司 北京瑞云互联网科技有限公司 颐高云石互联网科技 猪兼强互联网科技 贷财互联网科技 人人互联网科技是培训 互联网科技类展会 开一家科技互联网公司需要多少钱 阿里互联网科技企业 烟台灵鸽互联网科技有限公司 新氧科技和美国互联网有关系吗 互联网科技接地气 瑞安市蟠桃会互联网科技有限公司
0