sql-server - 如何从sql server中的逗号分隔字符串中删除重复项

标签 sql-server

如何从 sql server 中的逗号分隔字符串中删除重复值。不使用函数

 Declare @data varchar(max) = '34.22,768.55,34.22,123.34,12,999.0,999.0'

我的预期结果应该是

34.22,768.55,123.34,12,999.0

我试过这个查询,但它没有从变量中删除重复项。

Declare @data varchar(max) = '34.22,768.55,34.22,123.34,12,999.0,999.0'
set @data= (select '' + cast(cast('<d>'+replace(@data, ', ',',</d><d>')+'</d>'  as xml).query('distinct-values(/d)') as varchar(max)) +'')

最佳答案

请试试这个 -

DECLARE @x AS XML=''
Declare @finalstring varchar(max) = ''
DECLARE @Param AS VARCHAR(100) = '34.22,768.55,34.22,123.34,12,999.0,999.0'
SET @x = CAST('<A>'+ REPLACE(@Param,',','</A><A>')+ '</A>' AS XML)
select @finalstring = @finalstring + value + ',' from ( 
SELECT t.value('.', 'VARCHAR(10)') Value FROM @x.nodes('/A') AS x(t))p
GROUP BY value
PRINT SUBSTRING(@finalstring,0,LEN(@finalstring))

输出

12,123.34,34.22,768.55,999.0

对于 sql 2016+

Declare @data varchar(max) = '34.22,768.55,34.22,123.34,12,999.0,999.0'
Declare @finalstring varchar(max) = ''
select @finalstring = @finalstring + value + ',' from string_split(@data,',')
GROUP BY value
PRINT SUBSTRING(@finalstring,0,LEN(@finalstring))

输出

12,123.34,34.22,768.55,999.0

关于sql-server - 如何从sql server中的逗号分隔字符串中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48149854/

相关文章:

sql-server - 如何查找 SQL Server 中特定列中逗号分隔值中重复数字的次数

c# - EF Core 3,优化大量Include/ThenInclude

sql - 检查每组所有行的两列是否相等

sql-server - 动态 XML 到存储过程插入

sql - 使用动态行和列创建 PIVOT - SQL Server 2016

sql-server - 在 SQL Server 2008 中的符号之前隔离字符串中的子字符串

sql-server - SSMS 2012 智能感知行为

sql-server - 需要哪些数据库用户权限?

asp.net - 使用 asp.net 调用存储过程

sql-server - 从组中选择前 1 个并在查询中排序