powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Парсинг.
14 сообщений из 14, страница 1 из 1
Парсинг.
    #35552197
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подкажите, пожалуйста!

Есть varchar'овская колонка в таблице. В ней через запятую записаны цифры.

Увидел вот это:
Код: plaintext
1.
split_part(string text, delimiter text, field int) - Split string on delimiter and return the given field (counting from one) 	split_part('abc~@~def~@~ghi', '~@~',  2 )

Здесь я могу пропарсить эту строку и выудить в виде text число. Но вот что не могу найти - как мне получить количество эти чисел в этой строке (чтобы потом в цикле вырывать числа из этой строки), и как мне привести тип text к типу integer???

Заранее благодарен...
...
Рейтинг: 0 / 0
Парсинг.
    #35552219
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить - пользуюсь PostgreSQL 8.1
...
Рейтинг: 0 / 0
Парсинг.
    #35552237
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведение типов получилось...
Код: plaintext
1.
SELECT text '12' || '34' + 1  AS "integer"

остался открытам первый вопрос...
...
Рейтинг: 0 / 0
Парсинг.
    #35552275
ппппппп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с помощью регулярных выражений?
на каком-нить pl/perl сделать функцию - за тем ее вызывать :)
...
Рейтинг: 0 / 0
Парсинг.
    #35552293
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за отклик, но не хочу я писать функции на перле, к примеру. Хочу попытаться воспользоваться ТОЛЬКО средствами стандартных постгресовских функций... есть ли такой вариант?
Разбивать текст уже получается, привести к типу - тоже. Осталось только получить количество этих элементов в тексе - и на этом вопрос решится ведь....
...
Рейтинг: 0 / 0
Парсинг.
    #35552308
gggggggg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
regexp_split_to_table(string text, pattern text [, flags text])

Split string using a POSIX regular expression as the delimiter. See Section 9.7.3 for more information.
...
Рейтинг: 0 / 0
Парсинг.
    #35552316
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я видел эту функцию, но видимо, ее не существует в постресе 8.1:

Код: plaintext
1.
SELECT regexp_split_to_table('hello world', E'\\s+')

--->

ERROR: function regexp_split_to_table("unknown", "unknown", "unknown") does not exist
HINT: No function matches the given name and argument types. You may need to add explicit type casts.
...
Рейтинг: 0 / 0
Парсинг.
    #35552319
fwrefref
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее у постгреса есть функция regexp_matches(string text, pattern text [, flags text]) - возращает все подстроки соотв шаблону
...
Рейтинг: 0 / 0
Парсинг.
    #35552328
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
Может, попробовать
split_part(string text, delimiter text, field int)

и перебить номера field до тех пор пока эта функция возвратит NULL? :)
...
Рейтинг: 0 / 0
Парсинг.
    #35552333
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати говоря, функции regexp_matches тоже не существует в 8.1 видимо
...
Рейтинг: 0 / 0
Парсинг.
    #35552398
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create function split_to_table( text, text ) returns setof text language plpgsql as '
        declare
                str text;
                del text;
                pos integer;
        begin
                str:=$1;
                del:=$2;
                loop
                        pos:=position( del in str );
                        if pos>0 then
                                return next substring( str for pos-1 );
                                str:=substring( str from pos+1 );
                        else
                                return next str;
                                return;
                        end if;
                end loop;
        end;
';
...
Рейтинг: 0 / 0
Парсинг.
    #35552467
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно так


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT  x,
        Length(Translate(x,'1234567890-', ''))+ 1  AS num_count
FROM	(
	SELECT '1,5,6,4,3,56,789,87878' as x UNION ALL
	SELECT '14,75,86,94,03,566,789,93,756,7878,8,5,655,545' as x UNION ALL
	SELECT '31,56,6,49,-3,576' as x UNION ALL
	SELECT '31' as x UNION ALL
	SELECT '31,8' as x UNION ALL
	SELECT '41,55,6,4,-3,566,7789,83,56,7878,45,65' as x
	)foo
...
Рейтинг: 0 / 0
Парсинг.
    #35552480
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
числа из строки без цикла

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT  *,
        Generate_Series( 1 ,num_count)                   AS line_num,
        Split_Part(x,',',Generate_Series( 1 ,num_count)) AS line_var
FROM    (
	SELECT  x,
		Length(Translate(x,'1234567890-', ''))+ 1  AS num_count
	FROM	(
		SELECT '1,5,6,4,3,56,789,87878' as x UNION ALL
		SELECT '14,75,86,94,03,566,789,93,756,7878,8,5,655,545' as x UNION ALL
		SELECT '31,56,6,49,-3,576' as x UNION ALL
		SELECT '31' as x UNION ALL
		SELECT '31,8' as x UNION ALL
		SELECT '41,55,6,4,-3,566,7789,83,56,7878,45,65' as x
		)foo
	)upfoo
...
Рейтинг: 0 / 0
Парсинг.
    #35552680
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо! :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Парсинг.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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