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
或者您可以在一个请求中使用 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;
您可以将 string_agg()
函数与 '''; '''
一起使用,这样它就像
SELECT string_agg(tag_name, '''; ''') from my_table
在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
或者您可以在一个请求中使用 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;
您可以将 string_agg()
函数与 '''; '''
一起使用,这样它就像
SELECT string_agg(tag_name, '''; ''') from my_table