如何从Db2的十进制字段中获取无效值的列表?

问题描述 投票:1回答:1

我在一个非空十进制字段中具有空值的列时遇到问题。使用该列时(例如在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中的空值列表?

sql null db2 ibm-midrange db2-400
1个回答
3
投票

问题不是值是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' 
© www.soinside.com 2019 - 2024. All rights reserved.