SQL Server 2000:从逗号分隔的字符串中删除重复项

时间:2014-01-02 12:01:42

标签: sql-server tsql sql-server-2000

我已经研究了一段时间了,我找不到从SQL Server 2000中用逗号分隔的字符串删除重复字符串的方法。我可以在SQL Server 2005和2008中找到很多这样的示例但是不是2000年。

给出字符串     测试,TEST2,测试,TEST3,TEST2

有谁知道你会如何归还test,test2,test3

3 个答案:

答案 0 :(得分:3)

您可以使用while循环来解析字符串并将您找到的值放在临时变量中,在添加值之前,请检查它是否已添加。

declare @S varchar(50)
declare @T varchar(50)
declare @W varchar(50)

set @S = 'test,test2,test,test3,test2'
set @T = ','

while len(@S) > 0
begin
  set @W = left(@S, charindex(',', @S+',')-1)+','
  if charindex(','+@W, @T) = 0
    set @T = @T + @W
  set @S = stuff(@S, 1, charindex(',', @S+','), '')
end

set @S = substring(@T, 2, len(@T)-2)

print @S

如果要在查询中执行此操作,则需要将上面的代码放在函数中。

create function dbo.RemoveDups(@S varchar(50))
returns varchar(50)
as
begin
  declare @T varchar(50)
  declare @W varchar(50)

  set @T = ','

  while len(@S) > 0
  begin
    set @W = left(@S, charindex(',', @S+',')-1)+','
    if charindex(','+@W, @T) = 0
      set @T = @T + @W
    set @S = stuff(@S, 1, charindex(',', @S+','), '')
  end

  return substring(@T, 2, len(@T)-2)
end

并像这样使用

select dbo.RemoveDups(ColumnName) as DupeFreeString
from YourTable

答案 1 :(得分:0)

我在Oracle中寻找这个。我偶然发现了另一种解决方案。对于那些试图在Oracle中使用查询执行相同操作的人。请尝试以下查询

with t as (select 'SCOTT,ALLEN,KING,SCOTT' as in_cls from dual)
, t1 as ( select distinct regexp_substr(in_cls, '[^,]+', 1, rownum) names
                  from t
                  connect by rownum <= length(regexp_replace(in_cls, '[^,]'))+1)
SELECT 
    RTrim(xmlagg(xmlelement(a,names||',').extract('//text()')),',') string
from t1

结果STRING


ALLEN,SCOTT,KING

答案 2 :(得分:0)

可能需要稍微调整一下。我稍微扩大了字段然后尝试了:

SELECT dbo.RemoveDups('Procedure, Missing Attestation, Procedure, Incomplete Note, Missing technique');

但它错过了Procedure上的重复。