概述
以往工作中数据库使用DB2较多,在SQL开发中多次遇到NULL值的问题。尤其在初期对DB2不是太熟悉,对于问题的排查用了很多的时间。
今天对于DB2中NULL常见问题和大家进行分享。案例1
null值用来做数据比较,导致数据丢失
加工拉链表时,新增数据与历史数据字段进行对比时,字段值中存在null值,导致新增数据丢失,未加工到结果表。

F层数据发生变化(20180802,该条记录币种信息变更为01)

执行完对应存储过程,查看拉链表HIS,该条记录没有闭链,也没有新增一条开链数据

问题分析:
加工HIS表逻辑中,全量提取增量数据(新增数据与历史数据对比,值发生变化的需要提取出来)
源表数据币种信息为null,而null是不可以进行数据对比的,将null值转换为空后,可以进行数据对比。


修改后重新编译存储过程并执行,查看结果。
历史数据闭链,并新增一条开链数据

案例2
子查询数据存在null,导致查询结果不准确
在使用notin 的时候需要注意,如果notin 后面的数据范围中有为null的数据,这样会关联不出来数据,即使数据满足条件也不能取出。
下面查询结果为空,但是根据其他渠道知道,这种关联应该是有数据的,这说明语句有不标准的地方

我们找到一条数据,这条数据不存在于子查询中。


分析原因:
子查询中有为null的值,而null值无法用于关联计算。因此导致整个查询失效,即使有符合条件的数据,也无法关联出来。

解决方案:
1、用notexists 代替 notin
2、进行null值转换为空的操作


案例3
字段为数字类型在进行各种数学运算
Null值相加,修改后使用nvl函数将null值替换为0,显示正确结果


案例4
null值字段与其他字段进行拼接
任何值与null值拼接后都为null,通过nvl函数将null替换为’’后,显示正确结果


来源:IT那活儿,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/125558