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

hzbexzde  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(370)

我有一个问题,列在非空十进制字段中有空值。当使用该列时(比如在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中获得空值列表?

7d7tgy0s

7d7tgy0s1#

问题不在于值为null,如果是这样,那么

SELECT *
FROM mytable
WHERE badcol IS NULL

会有用的。问题是字段中的数据不是数字。
如果你的系统保持最新,那么恭喜你!ibm在最新的tr中为7.3和7.4添加了一些验证实用程序。
否则,请尝试以下操作(对于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'

相关问题