Arrays 从字符串数组中获取单引号字符串的逗号分隔列表?

Arrays 从字符串数组中获取单引号字符串的逗号分隔列表?,arrays,string,postgresql,csv,Arrays,String,Postgresql,Csv,我有这个阵列: ARRAY['this', 'is', 'my', 'string'] 我想将其转换为如下字符串: 'this', 'is', 'my', 'string' 我试过: array_to_string(ARRAY['this', 'is', 'my', 'string'], ',') 但我得到的不是期望的输出,而是: this, is, my, string 您必须自己使用字符转义将数组中的项用单引号括起来,或者通过预处理数组将项用单引号括起来。 试试这个 卸载数组,修改(

我有这个阵列:

ARRAY['this', 'is', 'my', 'string']
我想将其转换为如下字符串:

'this', 'is', 'my', 'string'
我试过:

array_to_string(ARRAY['this', 'is', 'my', 'string'], ',')
但我得到的不是期望的输出,而是:

this, is, my, string

您必须自己使用字符转义将数组中的项用单引号括起来,或者通过预处理数组将项用单引号括起来。 试试这个

卸载数组,修改(添加引号)其所有元素并将其聚合为字符串:

select string_agg(format('''%s''', elem), ',')
-- or
-- select string_agg(quote_literal(elem), ',')
from unnest(array['this', 'is', 'my', 'string']) elem

        string_agg         
---------------------------
 'this','is','my','string'
(1 row) 

(1) 标准SQL通过将单引号加倍而不是使用反斜杠来转义单引号。(2) 标准SQL的字符串连接运算符是
| |
。所以我想你的意思是说数组到字符串(数组['this','is','my','string'],'','')| |'''.@muistooshort是正确的。如果您在查询中的任何地方都将
\'
更改为
'
,您将有一个很好的解决方案。我试图使用PostgreSQL的转义,但我做错了。不管怎样,标准SQL转义最终会更好,所以我按照您的要求对其进行了切换。这是一个正确的答案。也许使用
quote_literal
函数代替
format
会更好,或者可以使用
format
函数的占位符
%L
。@PavelStehule-I aggree,带有
quote_literal()的变体
可能更优雅,谢谢。我不建议CSV格式使用单引号字符。使用双引号或无引号。
select string_agg(format('''%s''', elem), ',')
-- or
-- select string_agg(quote_literal(elem), ',')
from unnest(array['this', 'is', 'my', 'string']) elem

        string_agg         
---------------------------
 'this','is','my','string'
(1 row)