Oracle数据库中的case函数和decode函数
1、case函数
case函数有两种格式:
(1)格式一
CASE exp1
WHEN exp11 THEN exp12
WHEN exp21 THEN exp22
....
WHEN expN1 THEN expN2
ESLE expM
END
说明:
该函数的返回值为:当exp11的值和exp1相等时,返回exp12的值,当exp21的值和exp1相等时,返回exp22的值,……,当expN1的值和exp1相等时,返回expN2的值,如果exp1和WHEN后面的所有表达式的值都不相等,则返回expM的值。
举例:
SQL> select empno,ename,job,sal,
2 case job when 'CLERK' then sal*1.2
3 when 'SALESMAN' then sal*2
4 else sal
5 end AS SAL_NEW
6 from emp;
EMPNO ENAME JOB SAL SAL_NEW
---------- ---------- --------- ---------- ----------
7369 SMITH CLERK 800 960
7499 ALLEN SALESMAN 1600 3200
7521 WARD SALESMAN 1250 2500
7566 JONES MANAGER 2975 2975
7654 MARTIN SALESMAN 1250 2500
7698 BLAKE MANAGER 2850 2850
7782 CLARK MANAGER 2450 2450
7788 SCOTT ANALYST 3000 3000
7839 x_KING PRESIDENT 5000 5000
7844 TURNER SALESMAN 1500 3000
7876 ADAMS CLERK 1100 1320
7900 JAMES CLERK 950 1140
7902 FORD ANALYST 3000 3000
7934 MILLER CLERK 1300 1560
14 rows selected.
(2)格式二
CASE
WHEN exp11 THEN exp12
WHEN exp21 THEN exp22
....
WHEN expN1 THEN expN2
ESLE expM
END
说明:
(1)exp11、exp12、……、expN1为逻辑表达式;
(2)该函数的返回值为:当exp11的值为真时,返回exp12的值,当exp21的值为真时,返回exp22的值,……,当expN1的值为真时,返回expN2的值,如果WHEN后面的所有表达式的值都不为真,则返回expM的值。
举例:
SQL> select empno,ename,job,sal,
2 case when job='CLERK' then sal*1.2
3 when job='SALESMAN' then sal*2
4 else sal
5 end AS SAL_NEW
6 from emp;
EMPNO ENAME JOB SAL SAL_NEW
---------- ---------- --------- ---------- ----------
7369 SMITH CLERK 800 960
7499 ALLEN SALESMAN 1600 3200
7521 WARD SALESMAN 1250 2500
7566 JONES MANAGER 2975 2975
7654 MARTIN SALESMAN 1250 2500
7698 BLAKE MANAGER 2850 2850
7782 CLARK MANAGER 2450 2450
7788 SCOTT ANALYST 3000 3000
7839 x_KING PRESIDENT 5000 5000
7844 TURNER SALESMAN 1500 3000
7876 ADAMS CLERK 1100 1320
7900 JAMES CLERK 950 1140
7902 FORD ANALYST 3000 3000
7934 MILLER CLERK 1300 1560
14 rows selected.
2、DECODE函数
DECODE函数的功能和CASE函数相同,但使用更方便。语法如下:
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
说明:该函数把expression的值分别和search_1,search_2,…,search_n的值进行比较,如果和某个值相等,则返回其后的result值,如果都不相等,则返回default。
举例:
SQL> select empno,ename,job,sal,
2 decode(job,'CLERK',sal*1.2,'SALESMAN',sal*2,sal) AS SAL_NEW
3 from emp;
EMPNO ENAME JOB SAL SAL_NEW
---------- ---------- --------- ---------- ----------
7369 SMITH CLERK 800 960
7499 ALLEN SALESMAN 1600 3200
7521 WARD SALESMAN 1250 2500
7566 JONES MANAGER 2975 2975
7654 MARTIN SALESMAN 1250 2500
7698 BLAKE MANAGER 2850 2850
7782 CLARK MANAGER 2450 2450
7788 SCOTT ANALYST 3000 3000
7839 x_KING PRESIDENT 5000 5000
7844 TURNER SALESMAN 1500 3000
7876 ADAMS CLERK 1100 1320
7900 JAMES CLERK 950 1140
7902 FORD ANALYST 3000 3000
7934 MILLER CLERK 1300 1560
14 rows selected.
来源:CSDN
作者:睿思达DBA
链接:https://blog.csdn.net/weixin_44377973/article/details/104172947