DB2: [Код ошибки: -802, состояние SQL: 22023] [SQL0802] - PullRequest
0 голосов
/ 03 апреля 2012

Ошибка переведена с португальского на английский: «Ошибка преобразования данных или преобразования формата данных».

Я создал представление:

MNUM DECIMAL 8,0                                


create view db.abc as select * from x where decimal(SUBSTR(MNUM, 2,6), 6, 0) = 57092

в этом примере mnum выглядит как 1057092, SUBSTR (MNUM, 2,6) = 057092 и десятичное число (SUBSTR (MNUM, 2,6), 6, 0) должно быть = 57092, но выдает эту ошибку!

спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Вы можете использовать функцию MOD, чтобы получить часть числа вместо того, чтобы бороться с символами и числовыми операциями.

select decimal(SUBSTR(12345678, 2,6), 6, 0)
from sysibm.sysdummy1;
--returns 234567

select mod(12345678 / 10, 1000000)
from sysibm.sysdummy1;
--returns 234567

Они возвращают тот же результат, но последний можно применить для числовых операций.только.И, если вы хотите, чтобы ваш номер был десятичным с шестью знаками, вы можете сделать это (если ваша версия DB2 позволяет это):

select digits(dec(mod(12345678 / 10, 1000000), 6))
from sysibm.sysdummy1;

Просто чтобы быть уверенным, что ваша операция может работать, вам следуетоцените, не является ли значение MNUM ненулевым:

digits(dec(mod(COALESCE(MNUM, 0) / 10, 1000000), 6))
0 голосов
/ 03 апреля 2012

Функция SUBSTR работает со строкой, а не с десятичным числом.

Я не знаю, какую версию DB2 вы используете, но вы можете попробовать это:

DECIMAL(SUBSTR(CAST(MNUM AS CHAR(10)), 2, 6), 6, 0)

«10» включает 8 символов для числа, 1 для десятичной точки и 1 для знака.

...