Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQL DB2 для работы со строками / 5 сообщений из 5, страница 1 из 1
16.10.2009, 09:03
    #36254707
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL DB2 для работы со строками
Здравствуйте.

Мне надо написать процедуру, которая будет парсить строку. Строка такого типа:

614109,Пермский край,,Пермь г,,Ленина ул,25,,38

Надо разбить строку на части, ограниченные запятыми. Количество запятых всегда одно и то же - 8.
Строка представляет собой адрес, в соответствии с КЛАДР, надо разбить его на составные части.

Подскажите, есть ли в DB2 функции, позволяющие сделать такое разбиение. Если есть, то подскажите, в какую сторону мне копать.
...
Рейтинг: 0 / 0
16.10.2009, 11:49
    #36255166
Favn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL DB2 для работы со строками
Есть, конечно - POSSTR , например.
Советую почитать SQL Cookbook .
...
Рейтинг: 0 / 0
19.10.2009, 14:14
    #36259549
Rust()
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL DB2 для работы со строками
Для парсинга строк проще использовать C или java функции
...
Рейтинг: 0 / 0
19.10.2009, 16:11
    #36259958
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL DB2 для работы со строками
Конечно мы должны использовать recursive common table expression :

авторwith input(istr, sep) as
(select 'abc,def,...,xyz', 's' from sysibm.sysdummy1)

, parse_op(partstr, remdstr, istr, sep) as
(select varchar('', 1000), varchar(strip(istr), 1000), istr, sep
from input

union all

select
when locate(sep, remdstr) > 1 then strip(substr(remdstr, 1, locate(sep, remdstr) - 1))
when locate(sep, remdstr) = 1 then ''
else strip(remdstr) end,
when locate(sep, remdstr) > 0 then strip(substr(remdstr, locate(sep, remdstr) + 1))
else '' end,
istr, sep
from parse_op
where remdstr > ' '
)
Select partstr, istr from parse_op
where partstr > ' '

Lenny Khiger, ADSPA&VP
...
Рейтинг: 0 / 0
19.10.2009, 16:21
    #36259988
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL DB2 для работы со строками
Конечно мы должны использовать recursive common table expression :

авторwith input(istr, sep) as
(select 'abc,def,...,xyz', 's' from sysibm.sysdummy1)

, parse_op(partstr, remdstr, istr, sep) as
(select varchar('', 1000), varchar(strip(istr), 1000), istr, sep
from input

union all

select
case
when locate(sep, remdstr) > 1 then strip(substr(remdstr, 1, locate(sep, remdstr) - 1))
when locate(sep, remdstr) = 1 then ''
else strip(remdstr) end,
case
when locate(sep, remdstr) > 0 then strip(substr(remdstr, locate(sep, remdstr) + 1))
else '' end,
istr, sep
from parse_op
where remdstr > ' '
)
Select partstr, istr from parse_op
where partstr > ' '

Lenny
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQL DB2 для работы со строками / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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