我在一个非空十进制字段中具有空值的列时遇到问题。使用该列时(例如在case语句中)会出现问题,但当我仅执行select * from时就不会出现。
出现的错误是SQL0802类型6-无效的数字数据。我能够找到其中的一些并将其修复,但我想从这张非常大的表中获得所有这些列表。
但是同样,任何时候使用它,都会给我错误。这就是我一直在尝试的内容:
SELECT *
FROM (
SELECT keycol_1, keycol_2,
IFNULL(badcol, -1) AS badcol_tmp
FROM mytable
) WHERE badcol_tmp = -1
((请注意,该列不应为负数,这就是为什么我在此处使用-1的原因)。这给出了上面列出的错误。
我也尝试过
SELECT *
FROM mytable
WHERE badcol IS NULL
这不会给我任何结果...没有错误,但是没有行。但是我已经看到,在所有数据之间滚动时,它为空。
如何获取Badcol中的空值列表?
问题不是值是null,如果是这种情况,则
SELECT *
FROM mytable
WHERE badcol IS NULL
会工作。问题在于该字段中的数据不是数字。
如果您要使系统保持最新,那么恭喜! IBM在7.3和7.4的最新TR中添加了一些validation utilities。
否则,请尝试以下操作(对于2位数字的分区号):
select *
from mytable
where substr(hex(badcol),1,1) not in ('F','D')
or substr(hex(badcol),2,1) not between '0' and '9'
or substr(hex(badcol),3,1) not in ('F','D')
or substr(hex(badcol),4,1) not between '0' and '9'