我有存储1,2,3,4,5
在数据库中的值。
我想要它回来'1','2','3','4','5'
。
我正在尝试 string_agg(format('''%s''', ticker_information.user_groups), ',')
但给了我结果'1,2,3,4,5'
有什么解决办法吗?或者让我知道如果我做错了。
谢谢
我有存储1,2,3,4,5
在数据库中的值。
我想要它回来'1','2','3','4','5'
。
我正在尝试 string_agg(format('''%s''', ticker_information.user_groups), ',')
但给了我结果'1,2,3,4,5'
有什么解决办法吗?或者让我知道如果我做错了。
谢谢
您可以使用 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
如果你只想要一个带引号的字符串,试试这个
WITH sample AS (
SELECT '1,2,3,4,5'::text as test
)
SELECT
'''' || array_to_string(
string_to_array(test, ','),
''','''
) || ''''
FROM sample