开发工具与关键技术:Oracle sql*plus PLSQL
作者:王成
撰写时间:2019年4月2日
通用函数:
适用于任何数据类型,同时也适用于空值:
NVL 函数:
(1)将空值转换成一个已知的值;
例:
1、查询员工的奖金率不为空或者不为0的数量(组函数忽略空值)
select count(commission_pct) from employees
输出结果:
2、查询员工的奖金率总的数量
select count(nvl(commission_pct,0)) from employees
输出结果:
3、查询员工的奖金率为空或者为0的数量
select count(nvl(commission_pct,0))-count(commission_pct) from employees
输出结果:
由以上可知,nvl可以把空值转换为非空的值,使组函数不忽略空值
(2)可以使用的数据类型有日期、字符、数字。
NVL2 函数:
例:1、查询员工的奖金率
输出结果:
2、查询员工的奖金率,若为空,返回0.01,若不为空,返回实际奖金率+0.01
select nvl2(commission_pct, commission_pct+0.01,0.01) from employees
输出结果:
NULLIF 函数:
例:1、查询员工的姓和名长度是否相等,相等返回null,不等返回姓的长度
select first_name,last_name,nullif(length(first_name),length(last_name)) from employees
输出结果:
COALESCE 函数:
(1)COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。
(2)如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。
CASE 表达式:
当需要使用IF-THEN-ELSE时,使用case表达式
例:查询部门号为 10, 20, 30 的员工信息, 若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数
select first_name, department_id, salary,
case department_id
when 10 then salary*1.1
when 20 then salary*1.2
when 30 then salary*1.3
else salary
end
from employees where department_id in (10, 20, 30);
输出结果: