Как получить список недопустимых значений из десятичного поля в Db2? - PullRequest
1 голос
/ 29 мая 2020

У меня проблема с столбцом, имеющим нулевые значения в ненулевом десятичном поле. Проблема возникает, когда этот столбец используется (например, в операторе case), но не тогда, когда я просто выполняю select * from.

Это возникает ошибка SQL0802 type 6 - Numeri c data that не действует. Мне удалось найти несколько из них и исправить, но я хотел бы получить их список из этой очень большой таблицы.

Но, опять же, каждый раз, когда я использую его, он дает мне ошибка. Это то, что я в основном пробовал:

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?

1 Ответ

3 голосов
/ 30 мая 2020

Проблема не в том, что значение равно null, если бы это было так, то

SELECT *
FROM mytable
WHERE badcol IS NULL

сработало бы. Проблема в том, что данные в поле не являются числовыми c.

Если вы постоянно обновляете свою систему, поздравляю! IBM добавила несколько утилит проверки в самые последние TR для 7.3 и 7.4.

В противном случае попробуйте следующее (для номера зоны 2 di git):

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' 
...