如何从 Db2 中的小数字段中获取无效值列表?

How do you get a list of invalid values from a decimal field in Db2?

我对非空小数字段中具有空值的列有疑问。当使用该列时(如在 case 语句中)会出现问题,但当我只是执行 select * from.

时不会出现问题

出现的错误是 SQL0802 类型 6 - 数字数据无效。我能够找到其中的一些并修复它,但我想从这个非常大的 table.

中获得所有这些的列表

但同样,每当我使用它时,它都会给我错误。这是我一直在尝试的主要内容:

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'