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

PostgreSQL如何合并两个字符串并去除重复内容

PostgreSQL合并字符串并去除重复内容的解决方案

需求场景

现有两个文本变量:

_var_1 text := '815 PAADLEY ROAD PL';
_var_2 text := 'PAADLEY ROAD PL';
_var_3 text;

需要将两者合并后去除重复内容,最终_var_3仅保留815 PAADLEY ROAD PL。

解决方案

1. 针对子串包含场景(你的具体情况)

因为_var_2是_var_1的后缀子串,直接用字符串包含判断即可,高效简洁:

_var_3 := CASE 
            WHEN strpos(_var_1, _var_2) > 0 THEN _var_1 
            ELSE _var_1 || ' ' || _var_2 
          END;

原理:用strpos检查_var_1是否包含_var_2,如果是直接复用_var_1,否则拼接两个字符串。

2. 通用重复单词去重(保留首次出现顺序)

如果遇到更复杂的场景(比如两个字符串有部分重复单词但非完全包含),可以通过数组拆分+窗口函数实现按顺序去重:

WITH combined_words AS (
    SELECT unnest(string_to_array(_var_1 || ' ' || _var_2, ' ')) AS word
),
unique_ordered_words AS (
    SELECT 
        word,
        row_number() OVER (PARTITION BY word ORDER BY (SELECT NULL)) AS occurrence
    FROM combined_words
)
SELECT string_agg(word, ' ') INTO _var_3
FROM unique_ordered_words
WHERE occurrence = 1;

原理:

  • 先将两个字符串拼接后拆分为单词数组
  • 用row_number()给每个单词的出现次数标记序号,首次出现的序号为1
  • 只保留序号为1的单词,再用string_agg拼接回字符串

说明

你之前尝试的GROUP BY方法会打乱原单词顺序,而上面的窗口函数方法可以保留单词首次出现的顺序,更符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:15:30