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

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

我有一个问题,列在非空十进制字段中有空值。当使用该列时(比如在case语句中),问题就出现了,而不是当我简单地执行select*from时。
它出现的错误是sql0802类型6—无效的数字数据。我能够找到其中一些并修复它,但我想从这个非常大的表中获得所有这些的列表。
但是,无论何时我使用它,它都会给我一个错误。这就是我一直在尝试的:

  1. SELECT *
  2. FROM (
  3. SELECT keycol_1, keycol_2,
  4. IFNULL(badcol, -1) AS badcol_tmp
  5. FROM mytable
  6. ) WHERE badcol_tmp = -1

(请注意,列不应该有负数,这就是为什么我在这里使用-1)。这将产生上面列出的错误。
我也试过了

  1. SELECT *
  2. FROM mytable
  3. WHERE badcol IS NULL

但这并没有给我任何结果。。。没有错误,但没有行。但是我在滚动所有数据时看到它是空的。
如何在badcol中获得空值列表?

7d7tgy0s

7d7tgy0s1#

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

  1. SELECT *
  2. FROM mytable
  3. WHERE badcol IS NULL

会有用的。问题是字段中的数据不是数字。
如果你的系统保持最新,那么恭喜你!ibm在最新的tr中为7.3和7.4添加了一些验证实用程序。
否则,请尝试以下操作(对于2位分区号码):

  1. select *
  2. from mytable
  3. where substr(hex(badcol),1,1) not in ('F','D')
  4. or substr(hex(badcol),2,1) not between '0' and '9'
  5. or substr(hex(badcol),3,1) not in ('F','D')
  6. or substr(hex(badcol),4,1) not between '0' and '9'

相关问题