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

如何在SQL中删除字符串重复值并保留原有顺序?

保留顺序移除字符串重复值的SQL方案

要实现保留原顺序移除字符串中的重复单词,可以借助STRING_SPLIT的序号参数结合窗口函数或分组筛选完成,具体方案如下:

方法一:使用ROW_NUMBER()窗口函数

先拆分字符串并给每个单词标记首次出现的行号,再筛选出首次出现的记录拼接回字符串:

DECLARE @string NVARCHAR(MAX) = 'I need to remove duplicate duplicate values in a a string';

SELECT STRING_AGG(Value, ' ') WITHIN GROUP (ORDER BY Ordinal) AS UniqueOrderedString
FROM (
    SELECT 
        Value,
        Ordinal,
        -- 按单词分组,按出现顺序标记行号,首次出现为1
        ROW_NUMBER() OVER (PARTITION BY Value ORDER BY Ordinal) AS RowNum
    FROM STRING_SPLIT(@string, ' ', 1) -- 传入1参数返回序号Ordinal
) AS SplitData
WHERE RowNum = 1; -- 仅保留每个单词的首次出现

方法二:分组筛选首次出现的序号

先找出每个单词第一次出现的最小序号,再关联原拆分结果筛选对应记录并拼接:

DECLARE @string NVARCHAR(MAX) = 'I need to remove duplicate duplicate values in a a string';

SELECT STRING_AGG(s.Value, ' ') WITHIN GROUP (ORDER BY s.Ordinal) AS UniqueOrderedString
FROM STRING_SPLIT(@string, ' ', 1) s
INNER JOIN (
    -- 分组获取每个单词首次出现的序号
    SELECT Value, MIN(Ordinal) AS MinOrdinal
    FROM STRING_SPLIT(@string, ' ', 1)
    GROUP BY Value
) AS UniqueValues 
    ON s.Value = UniqueValues.Value 
    AND s.Ordinal = UniqueValues.MinOrdinal
ORDER BY s.Ordinal;

两种方法都能保证最终字符串的顺序与原字符串完全一致,同时移除重复单词。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:33:17