oracle实验15:操作数据为空的函数
综合数据类型函数
与空值(NULL)相关的一些函数,完成对空值(NULL)的一些操作。主要包括以下函数:
-NVL (表达式1, 表达式2) 函数功能是空值转换,把空值转换为其他值,解决空值问题。
如果表达式1的值非空,就返回表达式1,如果表达式1的值为空,就返回表达式2,连个表达式的数据类型一定要相同。
-NVL2 (表达式1, 表达式2, 表达式3) 函数是对第一个参数进行检查。
如果表达式1非空,则输出表达式2;如果表达式1为空,则输出表达式3。表达式1可以为任何数据类型。
-NULLIF (表达式1, 表达式2) 函数主要是完成两个参数的比较。
当两个参数不相等时,返回值是第一个参数值;当两个参数相等时,返回值是空值。
-COALESCE (表达式1, 表达式2, ... 表达式n) 函数是对NVL函数的扩展。
返回第一个不为空的参数,参数个数不受限制。
nvl
SQL> select ename,comm,nvl(comm,-1) from emp;
ENAME COMM NVL(COMM,-1)
---------- ---------- ------------
SMITH -1
ALLEN 300 300
WARD 500 500
JONES -1
MARTIN 1400 1400
BLAKE -1
CLARK -1
SCOTT -1
KING -1
TURNER 0 0
ADAMS -1
JAMES -1
FORD -1
MILLER -1
已选择14行。
有奖金就返回奖金值,没有就返回-1。
nvl2
SQL> select sal+comm,sal+nvl(comm,0),nvl2(comm,'工资+奖金','纯工资')"收入类别" from emp;
SAL+COMM SAL+NVL(COMM,0) 收入类别
------------ ------------------- ------
800 纯工资
1900 1900 工资+奖金
1750 1750 工资+奖金
2975 纯工资
2650 2650 工资+奖金
2850 纯工资
2450 纯工资
3000 纯工资
5000 纯工资
1500 1500 工资+奖金
1100 纯工资
950 纯工资
3000 纯工资
1300 纯工资
已选择14行。
有奖金就返回工资+奖金,没有奖金就返回纯工资。
nullif
SQL> select ename,nullif(ename,'KING') from emp;
ENAME NULLIF(ENA
---------- ----------
SMITH SMITH
ALLEN ALLEN
WARD WARD
JONES JONES
MARTIN MARTIN
BLAKE BLAKE
CLARK CLARK
SCOTT SCOTT
KING
TURNER TURNER
ADAMS ADAMS
JAMES JAMES
FORD FORD
MILLER MILLER
已选择14行。
如果员工的名字为KING就返回空,否则返回员工自己的名字。
coalesce
SQL> select coalesce(comm,sal,100) "奖金" from emp;
奖金
----------
800
300
500
2975
1400
2850
2450
3000
5000
0
1100
950
3000
1300
已选择14行。
如果有奖金就返回奖金,如果没有奖金就返回工资作为奖金,如果奖金和工资都为空就返回100作为奖金。