目录
处理null
多数值判断
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
Oracle 提供了两个简单的数据处理函数: nvl()、decode()。在版本升级的过程中,这两个函数又衍生出了许多子函数
下面首先通过查询,计算出每一个员工的年薪,包括基本工资和佣金
SQL> select empno,ename,job,sal,comm,(sal+comm)*12 income
2 from emp;
EMPNO ENAME JOB SAL COMM INCOME
---------- -------------------- ------------------ ---------- ---------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600 300 22800
7521 WARD SALESMAN 1250 500 21000
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250 1400 31800
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500 0 18000
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
可以发现,com 和 income 列中有许多是空的
上述现象的原因在于,所有没有佣金的员工,在进行年收入计算的时候,最终的计算结果都是null,因为 nul 在进行任何数学计算后结果永远都是 null。而实际上在计算过程中,如果发现数字内容为 null,则应该使用 0 来替代,这时就需要利用 nvl() 函数来解决此类问题
nvl( 列 | null,为空的默认值 )
如果列上的内容不是 null,则使用列的数据;如果为 null,则使用默认值
SQL> select empno,ename,job,sal,comm,nvl(comm,0),(sal+nvl(comm,0))*12 income
2 from emp;
EMPNO ENAME JOB SAL COMM NVL(COMM,0) INCOME
---------- -------------------- ------------------ ---------- ---------- ----------- ----------
7369 SMITH CLERK 800 0 9600
7499 ALLEN SALESMAN 1600 300 300 22800
7521 WARD SALESMAN 1250 500 500 21000
7566 JONES MANAGER 2975 0 35700
7654 MARTIN SALESMAN 1250 1400 1400 31800
7698 BLAKE MANAGER 2850 0 34200
7782 CLARK MANAGER 2450 0 29400
7839 KING PRESIDENT 5000 0 60000
7844 TURNER SALESMAN 1500 0 0 18000
7900 JAMES CLERK 950 0 11400
7902 FORD ANALYST 3000 0 36000
这个查询使用函数 NVL(comm,0),把 com 列所有的 nul 都替换为 0
所谓的多数值判断,指的是在输出的时候,对不同的结果分别进行数据转换。例如,每一位员工的职位使用的都是英文描述,在输出查询结果时决定将其更换为中文
decode( 列,匹配内容 1,显示内容 1,匹配内容 2,显示内容 2,...[,默认值 ])
SQL> select empno,ename,job,decode(job,'CLERK','办事员','SALESMAN','销售','MANAGER','经理','ANALYST','分析','PRESIDENT','总裁','暂无此 消息')
2 from emp;
EMPNO ENAME JOB DECODE(JOB,'CLERK','办事员','S
---------- -------------------- ------------------ ------------------------------
7369 SMITH CLERK 办事员
7499 ALLEN SALESMAN 销售
7521 WARD SALESMAN 销售
7566 JONES MANAGER 经理
7654 MARTIN SALESMAN 销售
7698 BLAKE MANAGER 经理
7782 CLARK MANAGER 经理
7839 KING PRESIDENT 总裁
7844 TURNER SALESMAN 销售
7900 JAMES CLERK 办事员
7902 FORD ANALYST 分析
可以发现每一位员工职位的英文描述更换为了中文