1

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

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

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

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

谢谢

4

2 回答 2

2

您可以使用 csv 字符串创建一个数组,用unnest包装元素,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

于 2021-07-26T13:06:34.400 回答
2

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

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

SELECT
  '''' || array_to_string(
    string_to_array(test, ','),
    ''','''
  ) || ''''
FROM sample
于 2021-07-26T13:08:17.543 回答