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;

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

2483

被折叠的 条评论
为什么被折叠?



