【问题标题】:Get a comma separated list of single quote string from string array?从字符串数组中获取逗号分隔的单引号字符串列表?
【发布时间】:2018-06-15 22:23:41
【问题描述】:

我有这个数组:

ARRAY['this', 'is', 'my', 'string']

我想把它转换成这样的字符串:

'this', 'is', 'my', 'string'

我试过了:

array_to_string(ARRAY['this', 'is', 'my', 'string'], ',')

但我得到的不是所需的输出:

this, is, my, string

【问题讨论】:

标签: arrays string postgresql csv


【解决方案1】:

取消嵌套数组,修改(添加引号)其所有元素并将它们聚合成一个字符串:

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) 

【讨论】:

  • 这是一个正确的答案。
  • 也许使用quote_literal函数而不是format会更好——或者可以使用format函数的占位符%L
  • @PavelStehule - 我同意,quote_literal() 的变体可能更优雅,谢谢。
【解决方案2】:

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

array_to_string(ARRAY['''this''','''is''','''my''','''string'''], ',')

【讨论】:

  • (1) 标准 SQL 通过将单引号加倍而不是反斜杠来转义单引号。 (2) 标准 SQL 的字符串连接运算符为||。所以我想你的意思是说'''' || array_to_string(ARRAY['this', 'is', 'my', 'string'], ''', ''') || ''''
  • @muistooshort 是正确的。如果您在查询中的任何位置将\' 更改为'',您将有一个很好的解决方案。
  • 我试图使用PostgreSQL的转义,但我做错了。无论如何,标准 SQL 转义最终会更好,所以我已按照您的要求进行了切换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2017-01-09
相关资源
最近更新 更多