Postreg SQL 用逗号分隔的引号获取所有值

Postreg SQL get All Value with quotes from the comma separated

我的值在数据库中存储为 1,2,3,4,5

我想要它回来 '1','2','3','4','5'

我正在尝试 string_agg(format('''%s''', ticker_information.user_groups), ',') 但给我结果 '1,2,3,4,5'

有什么解决办法吗?或者让我知道如果我做错了。

谢谢

您可以使用 unnest 从 csv 字符串创建一个数组,用 quote_literal() 包裹元素,然后再次聚合它们。您可以使用子查询实现此目的 ..

SELECT array_to_string(array_agg(i),',') FROM 
  (SELECT quote_literal(unnest(string_to_array(user_groups,','))) 
   FROM ticker_information) j (i);

   array_to_string   
---------------------
 '1','2','3','4','5'

或者用 LATERAL :

SELECT array_to_string(array_agg(quote_literal(j.i)),',') 
FROM ticker_information, 
LATERAL unnest(string_to_array(user_groups,',')) j (i);

  array_to_string
---------------------
'1','2','3','4','5'

另一种选择是使用正则表达式。但是如果您的 csv 元素包含逗号,它可能会变得令人讨厌。

演示:db<>fiddle

如果你只想要一个带引号的字符串,试试这个

WITH sample AS (
  SELECT '1,2,3,4,5'::text as test
)

SELECT
  '''' || array_to_string(
    string_to_array(test, ','),
    ''','''
  ) || ''''
FROM sample