Postgresql помещает строки в кавычки с помощью array_to_string

В выборе я использовал array_to_string, как это (пример)

array_to_string(array_agg(tag_name),';') tag_names

Я получил результирующую строку "tag1;tag2;tag3;...", но я хотел бы получить результирующую строку как "'tag1';'tag2';'tag3';...".

Как я могу это сделать в Postgres?

array_to_string(array_agg(...)) можно упростить до string_agg()
a_horse_with_no_name 25.04.2018 13:39

@a_horse_with_no_name спасибо :)

Developer Marius Žilėnas 25.04.2018 13:50
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
2
2
2 901
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте функции string_agg() и format(), например

with my_table(tag_name) as (
values 
    ('tag1'),
    ('tag2'),
    ('tag3')
)

select string_agg(format('''%s''', tag_name), ';' order by tag_name) tag_names
from my_table;

      tag_names       
----------------------
 'tag1';'tag2';'tag3'
(1 row)

Или используйте

array_to_string(array_agg(''''||tag_name||''''),';') tag_names 

или даже проще (спасибо за комментарий :))

string_agg(''''||tag_name||''''),';') tag_names 

Примечание:

When dealing with multiple-argument aggregate functions, note that the ORDER BY clause goes after all the aggregate arguments. For example, write this:

SELECT string_agg(a, ',' ORDER BY a) FROM table;

not this:

SELECT string_agg(a ORDER BY a, ',') FROM table; -- incorrect

См. https://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-AGGREGATES

Альтернативой здесь должна быть конкатенация строк, вы все равно должны использовать string_agg, а не array_to_string (array_agg ())

404 25.04.2018 13:18

@eurotrash Спасибо :)!

Developer Marius Žilėnas 25.04.2018 13:50

Или вы можете использовать unnest, format, array_agg и array_to_string в одном запросе следующим образом:

select array_to_string(t.tag, ',')  
from (  
    select array_agg(format('%L', t.tag)) as tag  
    from (  
        select unnest(tag_name) as tag  
    ) t  
) t;

Другие вопросы по теме