Oracle笔记(五)单行函数(三)

2014-11-24 15:03:32 · 作者: · 浏览: 1
M dual;
'1'+'2'
----------
3
所以现在的TO_NUMBER()函数基本上已经是不考虑了,重点的函数在TO_CHAR()上,其次是TO_DATE()函数。
五、通用函数
通用函数主要有两个:NVL()、DECODE(),这两个函数算是Oracle自己的特色函数了;
a、NVL()函数,处理null www.2cto.com
范例:要求查询出每个雇员的全部年薪
SELECT ename,sal,comm,(sal+comm)*12 FROM emp;
SQL> SELECT ename,sal,comm,(sal+comm)*12 FROM emp;
ENAME SAL COMM (SAL+COMM)*12
---------- ---------- ---------- -------------
SMITH 800
ALLEN 1600 300 22800
WARD 1250 500 21000
JONES 2975
MARTIN 1250 1400 31800
BLAKE 2850
CLARK 2450
SCOTT 800
KING 5000
TURNER 1500 0 18000
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
已选择14行。
这个时候有的雇员的年薪就变成了null,而造成这种问题的关键是在于comm字段上为null,那么要想解决这个问题,就必须做一种处理:将null变为0,而这个就是NVL()函数的作用。
SELECT ename,sal,comm,(sal+NVL(comm,0))*12,NVL(comm,0) FROM emp;
SQL> SELECT ename,sal,comm,(sal+NVL(comm,0))*12,NVL(comm,0) FROM emp;
ENAME SAL COMM (SAL+NVL(COMM,0))*12 NVL(COMM,0)
---------- ---------- ---------- -------------------- -----------
SMITH 800 9600 0
ALLEN 1600 300 22800 300
WARD 1250 500 21000 500
JONES 2975 35700 0
MARTIN 1250 1400 31800 1400
BLAKE 2850 34200 0
CLARK 2450 29400 0
SCOTT 800 9600 0
KING 5000 60000 0
TURNER 1500 0 18000 0
ADAMS 1100 13200 0
JAMES 950 11400 0
FORD 3000 36000 0
MILLER 1300 15600 0
已选择14行。
b、DECODE()函数:多数值判断
DECODE()函数非常类似于程序中的if…else…语句,唯一不同的是DECODE()函数判断的是数值,而不是逻辑条件。 www.2cto.com
例如,现在要求显示全部雇员的职位,但是这些职位要求替换为中文显示:
CLERK:办事员;
SALESMAN:销售;
MANAGER:经理;
ANALYST:分析员;
PRESIDENT:总裁;
这种判断肯定是逐行进行判断,所以这个时候就必须采用DECODE(),而此函数的语法如下:
DECODE(数值 | 列 ,判断值1,显示值1,判断值2,显示值2,判断值3,显示值3,…)
范例:实现显示的操作功能
SELECT empno,ename,job,DECODE(job,'CLERK','办事员','SALESMAN','销售人员','MANAGER','经理','ANALYST','分析员','PRESIDENT','总裁')
FROM emp;
SQL> SELECT empno,ename,job,DECODE(job,'CLERK','办事员','SALESMAN','销售人员','MANAGER','经理','ANALYST','分析员','PRESIDENT','总裁')
FROM emp;
EMPNO ENAME JOB DECODE(J
---------- ---------- --------- --------
7369 SMITH CLERK 办事员
7499 ALLEN SALESMAN 销售人员
7521 WARD SALESMAN 销售人员
7566 JONES MANAGER 经理
7654 MARTIN SALESMAN 销售人员
7698 BLAKE MANAGER 经理
7782 CLARK MANAGER 经理
7788 SCOTT CLERK 办事员
7839 KING PRESIDENT 总裁
7844 TURNER SALESMAN 销售人员
7876 ADAMS CLERK 办事员
7900 JAMES CLERK 办事员
7902 FORD ANALYST 分析员
7934 MILLER CLERK 办事员
已选择14行。
DECODE()函数是整个Oracle之中最具特点的函数,一定要将其掌握。
习题讲解 www.2cto.com
1、 选择部门30中的所有员工。
SELECT * FROM emp WHERE deptno=30;
2、 列出所有办事员(CLERK)的姓名,编号和部门编号。
SELECT empno, ename, deptno FROM emp WHERE job='CLERK';
3、 找出佣金高于薪金的员工。
SELECT *