Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Ошибка при выполнении преобразования строки в целое число с помощью INT / 4 сообщений из 4, страница 1 из 1
12.05.2017, 09:43
    #39451824
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении преобразования строки в целое число с помощью INT
1. Выполнил следующую команду проверки содержимого в столбце OKATO для возможности конвертации в тип integer
Код: plsql
1.
2.
3.
4.
5.
6.
7.
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. Выполняю следующий скрипт
Код: plsql
1.
2.
3.
4.
5.
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. В результате выполнения команды возникла следующая ошибка, вот лог выполнения команды:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
------------------------------ Введенные команды ------------------------------
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 
...
Рейтинг: 0 / 0
12.05.2017, 10:00
    #39451838
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении преобразования строки в целое число с помощью INT
ASukhov1986,

Мне нужно проверить можно ли значения в столбце преобразовать в целый тип данных, а дальше выполнить это преобразование в целый тип с помощью функции INT
...
Рейтинг: 0 / 0
12.05.2017, 10:22
    #39451858
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении преобразования строки в целое число с помощью INT
ASukhov1986,

Вот так работает:
Код: plsql
1.
2.
3.
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') = ''
...
Рейтинг: 0 / 0
12.05.2017, 10:49
    #39451891
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении преобразования строки в целое число с помощью INT
ASukhov1986,

Код: plsql
1.
2.
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
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Ошибка при выполнении преобразования строки в целое число с помощью INT / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]