Postgresql помещает строки в кавычки с помощью array_to_string - PullRequest
0 голосов
/ 25 апреля 2018

В select я использовал array_to_string вот так (пример)

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

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

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

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

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

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

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

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

Примечание:

При работе с агрегатными функциями с несколькими аргументами обратите внимание, что предложение ORDER BY идет после всех аргументов агрегирования.Например, напишите это:

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

не так:

SELECT string_agg (ORDER BY a,',') ИЗ таблицы;- неверно

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

0 голосов
/ 06 февраля 2019

Или вы можете использовать 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;
0 голосов
/ 25 апреля 2018

Используйте функции 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)
...