PostgreSQL如何将逗号分隔字符串转为字符串数组?
PostgreSQL 逗号分隔字符串转带单引号的字符串数组
你提到用STRING_TO_ARRAY('a,b,c', ',')得到的是{a,b,c},但需要输出每个元素带单引号的{'a','b','c'}。这里需要明确:STRING_TO_ARRAY返回的本身就是字符串数组,只是PostgreSQL默认输出时会省略元素的单引号(当元素无特殊字符时)。如果需要得到字符串形式的带引号数组,可以用以下几种方法实现:
- 方法一:拼接数组元素并包裹格式
SELECT '{' || ARRAY_TO_STRING(STRING_TO_ARRAY('a,b,c', ','), ',''') || '}' AS quoted_array;
执行后会直接返回{'a','b','c'}。原理是先拆分字符串为数组,再用ARRAY_TO_STRING将数组元素用','(单引号+逗号)连接,最后给整体加上首尾的大括号。
- 方法二:展开数组后聚合
SELECT '{' || STRING_AGG('''' || elem || '''', ',') || '}' AS quoted_array FROM UNNEST(STRING_TO_ARRAY('a,b,c', ',')) AS elem;
先通过UNNEST把数组展开为单行元素,给每个元素前后添加单引号,再用STRING_AGG将元素用逗号聚合,最后包裹大括号得到目标格式。
- 方法三:借助JSON转换替换引号
SELECT REPLACE(to_json(STRING_TO_ARRAY('a,b,c', ',')), '"', '''') AS quoted_array;
利用to_json将数组转为双引号包裹的JSON字符串,再把双引号替换为单引号,同样能得到{'a','b','c'}的结果。
补充:如果只是在SQL逻辑中使用数组,其实STRING_TO_ARRAY返回的数组已经是字符串类型,无需额外处理引号——PostgreSQL在内部会正确识别元素的字符串属性,带引号的格式更多是用于输出展示或生成特定格式的字符串。
内容的提问来源于stack exchange,提问作者İlker İnanç
相关产品推荐
相关产品推荐

