Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Ошибка при выполнении преобразования строки в целое число с помощью INT  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 249
1. Выполнил следующую команду проверки содержимого в столбце OKATO для возможности конвертации в тип integer
SELECT SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5) AS OKATO, 
            CASE WHEN LENGTH(RTRIM(LTRIM(TRANSLATE (SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5),'','0123456789'))))>0 THEN 
            0 ELSE 1 END AS CAN_CONVERT_TO_INT 
FROM CSM_CUSTOMER_BUFFER bf
WHERE LENGTH(RTRIM(LTRIM(bf.OKATO)))>4
order by 1 desc
FETCH FIRST 10 ROWS ONLY

2. Результат выполнения команды см Screenshot_3
3. Выполняю следующий скрипт
SELECT SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5) AS OKATO,INTEGER(SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5))
FROM CSM_CUSTOMER_BUFFER bf
WHERE LENGTH(RTRIM(LTRIM(bf.OKATO)))>4
order by 1 desc
FETCH FIRST 10 ROWS ONLY; 

4. В результате выполнения команды возникла следующая ошибка, вот лог выполнения команды:
------------------------------ Введенные команды ------------------------------
SELECT SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5) AS OKATO,INTEGER(SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5))
FROM CSM_CUSTOMER_BUFFER bf
WHERE LENGTH(RTRIM(LTRIM(bf.OKATO)))>4
order by 1 desc
FETCH FIRST 10 ROWS ONLY;
------------------------------------------------------------------------------
SELECT SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5) AS OKATO,INTEGER(SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5)) FROM CSM_CUSTOMER_BUFFER bf WHERE LENGTH(RTRIM(LTRIM(bf.OKATO)))>4 order by 1 desc FETCH FIRST 10 ROWS ONLY

OKATO 2
----- -----------
SQL0420N Неверный символ в символьной строке - аргументе функции "INTEGER".
SQLSTATE=22018

SQL0420N Неверный символ в символьной строке - аргументе функции "INTEGER ".

Объяснение:

Функция "<имя-функции>" использует в качестве аргумента
символьную строку, которая содержит недопустимый в числовых
константах языка SQL символ. Эта функция могла быть вызвана в
результате использования спецификации CAST с "<имя-функции>" в
качестве целевого типа данных. Функция или тип данных,
используемые в операторе SQL, могут быть синонимом для имени
"<имя-функции>".

Если в функции DECIMAL задан разделитель целой и дробной частей,
именно он должен быть использован вместо разделителя целой и
дробной частей по умолчанию.

Действия пользователя:

Убедитесь, что данная символьная строка, которая преобразуется в
числовой тип данных, содержит только допустимые в константах
языка SQL символы, в том числе разделитель целой и дробной частей,
если он задан.

sqlcode : -420

sqlstate : 22018


К сообщению приложен файл. Размер - 5Kb
12 май 17, 09:43    [20474712]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при выполнении преобразования строки в целое число с помощью INT  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 249
ASukhov1986,

Мне нужно проверить можно ли значения в столбце преобразовать в целый тип данных, а дальше выполнить это преобразование в целый тип с помощью функции INT
12 май 17, 10:00    [20474775]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при выполнении преобразования строки в целое число с помощью INT  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 249
ASukhov1986,

Вот так работает:
select INT(SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5))
from CSM_CUSTOMER_BUFFER bf 
where SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5)!='' AND TRANSLATE(SUBSTR(RTRIM(LTRIM(bf.OKATO)), 1, 5),' ','1234567890') = ''
12 май 17, 10:22    [20474941]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при выполнении преобразования строки в целое число с помощью INT  [new]
ASukhov1986
Member

Откуда: РФ, Москва
Сообщений: 249
ASukhov1986,

SELECT CASE WHEN LENGTH(RTRIM(LTRIM(OKATO)))<5 THEN NULL ELSE CASE WHEN TRANSLATE(SUBSTR(RTRIM(LTRIM(OKATO)), 1, 5),' ','1234567890') != '' THEN NULL ELSE INT(SUBSTR(LTRIM(OKATO), 1, 5)) END END
FROM CSM_CUSTOMER_BUFFER
12 май 17, 10:49    [20475109]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить