如果我的价值类似于' 10,10,20,30,40,20'在一个桌子的领域,然后我想把它作为' 10,20,30,40'
有没有sql函数可以做这样的事情?
由于 Sudhakar
答案 0 :(得分:2)
使用Jeff的http://www.sqlservercentral.com/articles/Tally+Table/72993/
中的DelimitedSplit8Kdeclare @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作为值