Вы можете использовать функцию 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))