Postgresql помещает строки в кавычки с помощью array_to_string
В select я использовал array_to_string вот так (пример)
array_to_string(array_agg(tag_name),';') tag_names
Я получил результирующую строку "tag1;tag2;tag3;..."
но я хотел бы получить результирующую строку как "'tag1';'tag2';'tag3';..."
,
Как я могу сделать это в Postgres?
4 ответа
Использование 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)
Или вы можете использовать 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;
Или использовать
array_to_string(array_agg(''''||tag_name||''''),';') tag_names
или даже проще (спасибо за комментирование:))
string_agg(''''||tag_name||''''),';') tag_names
Замечания:
При работе с агрегатными функциями с несколькими аргументами обратите внимание, что предложение ORDER BY идет после всех аргументов агрегирования. Например, напишите это:
ВЫБЕРИТЕ string_agg(a, ',' ORDER BY a) FROM table;
не это:
ВЫБЕРИТЕ string_agg (ORDER BY a, ',') FROM table; - неверно
См. https://www.postgresql.org/docs/current/static/sql-expressions.html.
Вы можете использовать
string_agg()
функция с
'''; '''
так что будет как
SELECT string_agg(tag_name, '''; ''') from my_table