Альтернативы для array_agg ()? - PullRequest
0 голосов
/ 02 марта 2012

Есть ли альтернатива функции PostgreSQL array_agg(), чтобы она не возвращала значения в формате: '{x, y, z,}' .
Могу ли я получить его вернуть только: 'x, y, z' ?

Ответы [ 3 ]

7 голосов
/ 02 марта 2012

В PostgreSQL 9.0 или более поздней версии string_agg(val, ',').
Возвращает строку с разделителями по вашему выбору.

array_agg(val) возвращает массив , что неудивительно.Фигурные скобки, которые вы видите, являются неотъемлемой частью литералов массива - текстового представления массивов.

В более старых версиях (или любой другой версии) вы можете заменить на array_to_string(array_agg(val), ',').

Или quick'n'dirty: trim(array_agg(val)::text, '{}' - если значения никогда не начинаются и не заканчиваются фигурными скобками.

4 голосов
/ 02 марта 2012

Если вы еще не используете 9.0 (с уже упомянутой функцией string_agg()), вы можете использовать array_to_string() для результата array_agg()

2 голосов
/ 02 марта 2012

Используйте функцию STRING_AGG:

SELECT
  STRING_AGG(name, ',')
FROM
  person;
...