Oracle排雷-运算中的null

本文探讨了Oracle数据库在四则运算及合计时与NULL值的处理方式。当进行四则运算,若涉及的数值中包含NULL,结果将为NULL。在进行合计运算时,Oracle会自动忽略NULL值,但可以通过特定方法包含NULL值进行计算。

Oracle排雷-运算中的null

1.四则运算中的NULL

          Oracle中与null进行四则运算的结果都为null

最近在使用Oracle编程时遇到一个问题,

     当进行四则运算时 如果其中一个值为null,则计算结果都为null

创建测试表

DROP TABLE TESTED.NULL_TEST;
CREATE TABLE TESTED.NULL_TEST(
    COLUMN1 VARCHAR2(100 CHAR),
    COLUMN2 VARCHAR2(100 CHAR),
    COLUMN3 NUMBER,
    COLUMN4 NUMBER,
    COLUMN5 INTEGER,
    COLUMN6 INTEGER
);

插入测试数据

SET DEFINE OFF;
Insert into TESTED.NULL_TEST
   (COLUMN1,COLUMN2, COLUMN3,COLUMN4,COLUMN5,COLUMN6)
 Values
   ('100','', 1000,'', 123,'');
COMMIT;

查询与null值进行四则运算的结果

SELECT  NT.COLUMN1+NT.COLUMN2 AS A1,NT.COLUMN1-NT.COLUMN2 AS A2,NT.COLUMN1*NT.COLUMN2 AS A3,NT.COLUMN1/NT.COLUMN2 AS A4,
        NT.COLUMN3+NT.COLUMN4 AS B1,NT.COLUMN3-NT.COLUMN4 AS B2,NT.COLUMN3*NT.COLUMN4 AS B3,NT.COLUMN3/NT.COLUMN4 AS B4,
        NT.COLUMN5+NT.COLUMN6 AS C1,NT.COLUMN5-NT.COLUMN6 AS C2,NT.COLUMN5*NT.COLUMN6 AS C3,NT.COLUMN5/NT.COLUMN6 AS C4
 FROM TESTED.NULL_TEST NT

总结:

   Oracle中进行四则运算时,如果不能保证数据是否为空,最好加上NVL,

SELECT  NVL(NT.COLUMN1,0)+NVL(NT.COLUMN2,0) AS A1,NVL(NT.COLUMN1,0)-NVL(NT.COLUMN2,0) AS A2,NVL(NT.COLUMN1,0)*NVL(NT.COLUMN2,0) AS A3,NVL(NT.COLUMN2,0)/NVL(NT.COLUMN1,0) AS A4,
        NVL(NT.COLUMN3,0)+NVL(NT.COLUMN4,0) AS B1,NVL(NT.COLUMN3,0)-NVL(NT.COLUMN4,0) AS B2,NVL(NT.COLUMN3,0)*NVL(NT.COLUMN4,0) AS B3,NVL(NT.COLUMN4,0)/NVL(NT.COLUMN3,0) AS B4,
        NVL(NT.COLUMN5,0)+NVL(NT.COLUMN6,0) AS C1,NVL(NT.COLUMN5,0)-NVL(NT.COLUMN6,0) AS C2,NVL(NT.COLUMN5,0)*NVL(NT.COLUMN6,0) AS C3,NVL(NT.COLUMN6,0)/NVL(NT.COLUMN5,0) AS C4
 FROM TESTED.NULL_TEST NT

当然还要注意除数为0

2.合计中的null值

继续向测试表中插入一些数据

SET DEFINE OFF;
Insert into TESTED.NULL_TEST
   (COLUMN1,COLUMN2, COLUMN3,COLUMN4,COLUMN5,COLUMN6)
 Values
   ('324','', 43214,'', 213421,'');
Insert into TESTED.NULL_TEST
   (COLUMN1,COLUMN2, COLUMN3,COLUMN4,COLUMN5,COLUMN6)
 Values
   ('','1000', '',12345,'',54321);
Insert into TESTED.NULL_TEST
   (COLUMN1,COLUMN2, COLUMN3,COLUMN4,COLUMN5,COLUMN6)
 Values
   ('','123.12', '',1111,'',43444);
COMMIT;

使用函数进行计算

SELECT COUNT(COLUMN1),MAX(COLUMN1),MIN(COLUMN1),
       SUM(COLUMN3),MAX(COLUMN3),MIN(COLUMN3),
       SUM(COLUMN5),MAX(COLUMN5),MIN(COLUMN5)
 FROM TESTED.NULL_TEST NT;

总结

     Oracle中进行合计运算时,会自动过滤掉为NULL的值,

     如果要计算上NULL值

    例如计算COLUMN1字段中有多少为NULL的值时,可以使用

   

SELECT COUNT(NVL(COLUMN1,0)) FROM TESTED.NULL_TEST WHERE COLUMN1 IS NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值