使用sql从String中删除重复项

时间:2017-10-13 12:48:24

标签: sql-server sql-server-2008

如果我的价值类似于' 10,10,20,30,40,20'在一个桌子的领域,然后我想把它作为' 10,20,30,40'

有没有sql函数可以做这样的事情?

由于 Sudhakar

3 个答案:

答案 0 :(得分:2)

使用Jeff的http://www.sqlservercentral.com/articles/Tally+Table/72993/

中的DelimitedSplit8K
declare @value      varchar(100) = '10,10,20,30,40,20',
    @new_value  varchar(100)

select  @new_value = isnull(@new_value + ',', '')  + Item
from    DelimitedSplit8K(@value, ',')
group by Item
order by Item

select  @new_value

答案 1 :(得分:1)

这很久以前了。这可能需要一些修改。但它会产生输出。

尝试:

DECLARE @Data_String AS VARCHAR(1000), @Result as varchar(1000)=''
SET @Data_String = '10,10,20,30,40,20'
SET @Data_String = REPLACE(@Data_String,'|',',')

select @Data_String;

SELECT @Result=@Result+col+',' from(
    SELECT DISTINCT t.c.value('.','varchar(100)') col from(
        SELECT cast('<A>'+replace(@Data_String,',','</A><A>')+'</A>' as     xml)col1)data 
    cross apply col1.nodes('/A') as t(c))Data
SELECT LEFT(@Result,LEN(@Result)-1)

答案 2 :(得分:0)

认为它存储整数,您可以通过创建函数来获取它们首先需要拆分值然后必须使用不同的函数,如下所示

首先创建一个像

这样的函数
CREATE FUNCTION [dbo].[idpGetSplitedString]
(
    @String varchar(8000), 
    @Delimiter char(1)
)
RETURNS 
@temptable TABLE 
(
    items varchar(8000)
)
AS
BEGIN
    declare @idx int        
    declare @slice varchar(8000)        

    select @idx = 1        
        if len(@String)<1 or @String is null  return        

    while @idx!= 0        
    begin        
        set @idx = charindex(@Delimiter,@String)        
        if @idx!=0        
            set @slice = left(@String,@idx - 1)        
        else        
            set @slice = @String        

        if(len(@slice)>0)   
            insert into @temptable(Items) values(rtrim(ltrim(@slice)))        

        set @String = right(@String,len(@String) - @idx)        
        if len(@String) = 0 break        
    end  

    RETURN 
END

然后调用函数

选择[dbo] .idpGetSplitedString作为值