如何在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
相关产品推荐
相关产品推荐

