Oracle数据库中的case函数和decode函数

情到浓时终转凉″ 提交于 2020-02-04 20:58:24

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.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!