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

如何在PostgreSQL中对比并提取非重复文本?

PostgreSQL 实现仅追加唯一词到目标列(去重后用|分隔)

你需要把新数据里的唯一词追加到已有列,而非直接拼接全部文本——比如原有值是qwerty,新输入qwerty new,最终要得到qwerty | new,而不是重复拼接的qwerty qwerty new。

原来的代码仅能简单拼接不同文本,无法实现词级去重,我们可以用PostgreSQL的数组函数来完成这个需求:

实现思路

  1. 将原有字段和新传入字段的文本拆分成单词数组
  2. 合并两个数组并去除重复项
  3. 把去重后的数组用|连接成目标格式的字符串
  4. 处理空值和前后空格,避免生成无效内容

完整SQL代码示例

假设你是在INSERT ... ON CONFLICT DO UPDATE场景下使用(这也是原有代码的典型应用场景),可以这么写:

coalesce(
  array_to_string(
    array_distinct(
      array_cat(
        string_to_array(trim(coalesce(main_parse_user.name, '')), ' '),
        string_to_array(trim(coalesce(EXCLUDED.name, '')), ' ')
      )
    ),
    ' | '
  ),
  ''
)

代码解释

  • trim(coalesce(字段, '')):先把null字段转为空字符串,再去除前后空格,避免拆分出空元素
  • string_to_array(..., ' '):将文本按空格拆分成单词数组
  • array_cat(...):合并原有字段和新字段的单词数组
  • array_distinct(...):对合并后的数组去重,保留唯一的词
  • array_to_string(..., ' | '):把去重后的数组用|连接成最终字符串
  • 最外层的coalesce(..., ''):处理极端情况(比如原有值和新值都是null),确保返回空字符串而非null

测试验证

  • 原有值:qwerty,新值:qwerty new → 结果:qwerty | new
  • 原有值:hello world,新值:world foo bar → 结果:hello | world | foo | bar
  • 原有值为null,新值:test → 结果:test

内容的提问来源于stack exchange,提问作者Qadyr Israfilov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:20:43