关于NVL函数的一个细节问题

关于NVL函数的一个细节问题

一、准备工作:创建一个表并插入测试数据

SQL>  create table t0720 (a VARCHAR2(2) ,

  2                   b NUMBER(12,2)

  3           )

  4  /

表已创建

 

SQL> INSERT INTO t0720 VALUES ('B',NULL)

  2  /

已创建一行

 

SQL> COMMIT

  2  /

提交完成

 

SQL> SELECT * FROM t0720

  2  /

A          B

-- ---------

B

 

SQL>

 

二、一个问题

SELECT NVL(B,0)  FROM t0720 WHERE a = 'B'

SELECT NVL(B,0)  FROM t0720 WHERE a = 'X' 的返回值是否都为零?

回答是否定的。语句执行结果如下:

 

SQL> SELECT NVL(B,0)  FROM t0720 WHERE a = 'B'

  2  /

 

 NVL(B,0)

---------

        0

 

SQL> SELECT NVL(B,0)  FROM t0720 WHERE a = 'X'

  2  /

 

未选定行

 

三、结论

    SQL中使用NVL函数时,若根本就没有满足条件的数据记录返回时,NVL将不进行处理,或者说此时根本无数据可供NVL函数处理。

 

 

四、应用举例

    SQL> SELECT   SUM(NVL(B,0))   FROM   t0720   WHERE   a   =   'X'

    2  /

    /*由于无满足条件的数据返回,NVL未做处理。故返回NULL*/

SUM(NVL(B,0))

-------------

 

 

SQL> SELECT   NVL(SUM(B) ,0)   FROM t0720   WHERE   a   =   'X'

  2  /

/*虽然根据查询条件无满足条件的数据返回,但根据SUM函数的特点

最终将返回NULL值,而此值被NVL函数捕获并被处理,故返回0值。*/

NVL(SUM(B),0)

-------------

    0

 

SQL>

小结:若想达到无数据则SUM返回0值的目的,则应把NVL放在外层而不是里层。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10595277/viewspace-408736/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10595277/viewspace-408736/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值