假设我在Ms sql中有DataTable代表简单矩阵
现有表
ids_cloumn
========================
RX ,BX , AS , RX ,BX , AS
XR ,Xs , AS
XR ,Xs , AS,XR ,Xs , AS
RX ,BX , AS ,
RX ,BX , AS ,
我想过滤字符串中的重复数据,数据由'分隔。 ,'
ids_column
========================
RX ,BX , AS
XR ,Xs , AS
XR ,Xs , AS
RX ,BX , AS ,
RX ,BX , AS ,
现在我正在使用这个但是这种方法不成功
declare @i int
declare @c char
declare @rst varchar(8000)
set @i=1
set @rst=substring(‘aaassrt’,1,1)
set @c=”
while @i<=len(‘aaassrt’)
begin
set @c=substring(‘aaassrt’,@i,1)
if charindex( @c,@rst,1)=0
set @rst=@rst+@c
set @i=@i+1
end
select @rst
答案 0 :(得分:2)
我希望这会帮助你xQuery,但我无法删除字符串的最后一个逗号:(对于我的下面的查询,你必须保留字符之间的特定空格
declare @temp table (Id int,val nvarchar(33))
insert into @temp values (1,'RX ,BX ,AS ,RX ,BX ,AS')
insert into @temp values (2,'XR ,Xs ,AS ')
insert into @temp values (3,'XR ,Xs ,AS ,XR ,Xs ,AS')
insert into @temp values (4,'RX ,BX ,AS ,')
insert into @temp values (5,'RX ,BX ,AS ,')
select Id,
REPLACE(cast(cast('<d>'+ replace(LTRIM(RTRIM(val)), ' ,','</d><d>')+'</d>' as xml)
.query('distinct-values(/d)') as varchar), ' ', ' ,')AS [val]
from @temp;
RESULT
答案 1 :(得分:0)
这是一种方法:
declare @data table(ids nvarchar(100))
insert into @data(ids) values
('1 , 2 , 4 , 23 , 1 , 2 , 4 , 23 ,')
, ('1 , 3 , 4 , 3 , 4 ')
, ('2 , 3 , 6 ,')
, ('3 , 5 , 8 , 3 , 5 ')
, ('1 , 7 , 9 ')
Select distinct xml.ids, LTRIM(RTRIM(x.id.value('.', 'varchar(5)'))) as id
From (
Select ids
, CAST('<x>'+REPLACE(ids, ',', '</x><x>') + '</x>' as xml) as data
From @data
) as xml
Cross Apply data.nodes('x') as x(id)
Where LTRIM(RTRIM(x.id.value('.', 'varchar(5)'))) <> ''
就像其他人一样,你不应该在一个列中存储逗号分隔值。 您应该将其记录在另一个表中的行中,并将其连接到主表。