Исправьте мой запрос DB2, что я получаю ошибку - PullRequest
0 голосов
/ 19 апреля 2019

Я использую запрос DB2 ниже, чтобы получить определенную длину символа из CLASSIFICATION Coulmn с условием 0 перед '\', но я получаю ошибку.

select SERVICE_REQUEST,

(case when 
    (SUBSTR(CLASSIFICATION,LOCATE('\',CLASSIFICATION)-2,1))='0' then
        RIGHT(CLASSIFICATION,LENGTH(CLASSIFICATION)-LOCATE('\',CLASSIFICATION))
    ELSE CLASSIFICATION
end) 
as CLASSIFICATION2

 from REPORTDB3.MAXIMO_INDIA_SR_MONTHLY_REPORT where length(SERVICE_REQUEST)=7

ОШИБКА:

An error occurred while processing the results. - 
The statement was not executed because a numeric argument of a scalar function is out of range.. SQLCODE=-138, SQLSTATE=22011, DRIVER=4.19.56

Не могли бы вы помочь мне в этом.

С уважением, Sambit

Уже отправился в Stackoverflow за ответами

1 Ответ

0 голосов
/ 19 апреля 2019

Полагаю, вам следует позаботиться о ситуациях, когда в данных столбца CLASSIFICATION возникают следующие проблемы:
- Нет \ символов вообще
- \ символов в 1-й позиции 2
В этих случаях ваш запрос передает отрицательный 2-й параметр в функцию SUBSTR, что недопустимо.

with REPORTDB3_MAXIMO_INDIA_SR_MONTHLY_REPORT(CLASSIFICATION, SERVICE_REQUEST) as (
values 
  ('ab0c|def', '1234567')
, ('\def', '1234567')
, ('a\def', '1234567')
, ('ab0c\def', '1234567')
)
select SERVICE_REQUEST, CLASSIFICATION,
case SUBSTR(CLASSIFICATION, case when pos>2 then pos end -2, 1)
  when '0' then SUBSTR(CLASSIFICATION, pos+1)
  else CLASSIFICATION
end as CLASSIFICATION2
from (
select SERVICE_REQUEST, CLASSIFICATION, LOCATE('\', CLASSIFICATION) as pos
from REPORTDB3_MAXIMO_INDIA_SR_MONTHLY_REPORT
where length(SERVICE_REQUEST)=7
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...