Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Пользовательская агрегатная функция конкатенации  [new]
AlexeyPetroff
Member

Откуда:
Сообщений: 2
Здравствуйте. У меня есть задание, с которым я пытаюсь уже долго разобраться,но всё никак.
Есть таблица, самая простая, состоящая из id(1,2,3,4), к примеру. Нужно написать агрегатную функцию конкатенации, чтобы, по итогу, возвращалось значение по типу 1_2_3_4.
По идее, нужно преобразовать столбик значений либо в массив, либо в строку,а потом пройтись по ней циклом и заменить пробелы на '_' или что-то такое. В теории понятно как это можно реализовать, но на практике я не могу понять с чего хотя бы начать.
Ищу помощи или небольшой подсказки на этот счет.
17 ноя 20, 16:09    [22233913]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская агрегатная функция конкатенации  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 753
AlexeyPetroff,

Вообще такая функция уже написана, называется string_agg:
with t (id) as (values(1),(2),(3),(4)) select string_agg(id::text, '_') from t; 
 string_agg 
------------
 1_2_3_4

Если нужно написать свою собственную агрегатную функцию, то можно посмотреть здесь (тема 16) или здесь.
17 ноя 20, 16:43    [22233952]     Ответить | Цитировать Сообщить модератору
 Re: Пользовательская агрегатная функция конкатенации  [new]
AlexeyPetroff
Member

Откуда:
Сообщений: 2
Павел Лузанов,

Да, я видел, что уже есть они, но поставлена задача свою написать. У меня просто проблема с PostgreSQL и в общем с SQL, наверное. Не могу понять как составить это дело.
Чем сама функция и из чего состоит я понял, просто не могу понять как составить и с чего начать саму внутреннюю функцию для обработки. Спасибо за ссылки, изучу, может поможет.

Сообщение было отредактировано: 17 ноя 20, 16:44
17 ноя 20, 16:48    [22233956]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить