You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Postgres的regexp_replace去除逗号分隔字符串中的重复项?

PostgreSQL 逗号分隔字符串去重方案

方案1:使用regexp_replace正则匹配去重

如果一定要用regexp_replace,可以通过反向引用匹配已出现的元素,但需要先统一分隔符格式(处理无空格的逗号):

-- 先标准化分隔符为", ",再匹配重复元素替换
SELECT regexp_replace(
  regexp_replace('emarian, eiulian, evasile, emarina,emarian, eiulian, evasile, emarina', ',\s*', ', ', 'g'),
  '(\b\w+\b)(?:, \1)+',
  '\1',
  'g'
);

正则说明:

  • (\b\w+\b):匹配单个单词元素(作为分组1)
  • (?:, \1)+:匹配后续重复的同元素(非捕获分组,避免干扰替换)
  • '\1':用第一次出现的元素替换重复序列
  • 'g':全局匹配替换

方案2:拆分-去重-聚合(更可靠)

纯正则对格式敏感,复杂场景容易出错,更稳妥的方式是拆分字符串为行、去重后重新聚合:

SELECT string_agg(DISTINCT trim(elem), ', ') AS unique_list
FROM unnest(string_to_array('emarian, eiulian, evasile, emarina,emarian, eiulian, evasile, emarina', ',')) AS elem;

步骤说明:

  1. string_to_array:按逗号把字符串拆成数组
  2. unnest:将数组转为单行记录
  3. trim(elem):清除每个元素前后的空格
  4. DISTINCT:去除重复元素
  5. string_agg:把去重后的元素用, 拼接成字符串

内容的提问来源于stack exchange,提问作者Iulian Dinu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:08:15