当前位置:首页 > 信息技术 > 数据库系统 > Oracle > Oracle处理空值的问题

Oracle处理空值的问题

跟别的RDBMS系统一样,Oracle中的空值(nulls)也应该被特殊对待。在Oracle中,有3个(也许更多?)函数可以用来处理空值,NVL, NVL2 和 COALESCE。我想要问你们一个问题,但是首先我自己得先温习一下。

NVL ( expr1 , expr2 )
如果expr1是空,那么NVL返回expr2。如果expr1不是空,那么NVL返回expr1。

NVL2 ( expr1 , expr2 , expr3 )
如果expr1是空,那么NVL2返回expr3。如果expr1不是空,那么NVL返回expr2。

COALESCE(expr[,expr]…)
返回参数列表中的第一个非空值。

当然我也可以使用CASE或者DECODE函数来处理空值。

下面左右的查询都返回相同的结果:

使用NVL:

HR@XE> select nvl(commission_pct,0)
2 from employees
3 where commission_pct is null
4 and rownum = 1;
NVL(COMMISSION_PCT,0)
———————
0
使用NVL2:

HR@XE> select nvl2(commission_pct,commission_pct,0)
2 from employees
3 where commission_pct is null
4 and rownum = 1;
NVL2(COMMISSION_PCT,COMMISSION_PCT,0)
————————————-
0
使用COALESCE:

HR@XE> select COALESCE(commission_pct,0)
2 from employees
3 where commission_pct is null
4 and rownum = 1;
COALESCE(COMMISSION_PCT,0)
————————–
0
使用CASE:

HR@XE> select
2 case
3 when commission_pct is null then 0
4 else commission_pct
5 end commission_pct
6 from employees
7 where commission_pct is null
8 and rownum = 1;
COMMISSION_PCT
————–
0
使用DECODE:

HR@XE> select
2 decode(commission_pct,null, 0,
3 commission_pct) commission_pct
4 from employees
5 where commission_pct is null
6 and rownum = 1;
COMMISSION_PCT
————–
0

 

Oracle处理空值的问题:等您坐沙发呢!

发表评论

表情
还能输入210个字