Postgresql 将字符串放在引号内 array_to_string

Postgresql put strings inside quotes with array_to_string

在select中我使用了array_to_string这样的(例子)

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

我得到了结果字符串 "tag1;tag2;tag3;..." 但我想得到结果字符串 "'tag1';'tag2';'tag3';...".

我如何在 Postgres 中执行此操作?

使用string_agg() and 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

或者您可以在一个请求中使用 unnestformatarray_aggarray_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;

您可以将 string_agg() 函数与 '''; ''' 一起使用,这样它就像

SELECT string_agg(tag_name, '''; ''') from my_table