1
刚才对这种情况有了一个想法,其中包含数据'A,B,C,D,A,B,E,D'的列应该被删除为'A,B,C ,d,E”。我可以通过分割划分的值,重复和重新分两步来考虑这一点。我不确定是否有任何简单的方法来实现这一点,我是否错过了任何明显的东西?删除SQL列中的分隔文本
刚才对这种情况有了一个想法,其中包含数据'A,B,C,D,A,B,E,D'的列应该被删除为'A,B,C ,d,E”。我可以通过分割划分的值,重复和重新分两步来考虑这一点。我不确定是否有任何简单的方法来实现这一点,我是否错过了任何明显的东西?删除SQL列中的分隔文本
在SQL Server上,我会做这样的事情(基于this article):
DECLARE @TEXT nvarchar(400) = 'A,B,A,C,D,B,D';
DECLARE @DEDUPTEXT nvarchar(400);
WITH Split(stpos,endpos)
AS(
SELECT 0 AS stpos, CHARINDEX(',',@text) AS endpos
UNION ALL
SELECT endpos+1, CHARINDEX(',',@text,endpos+1)
FROM Split
WHERE endpos > 0
)
SELECT @DEDUPTEXT = COALESCE(@DEDUPTEXT+ ',', '') + [Data]
FROM (
SELECT DISTINCT
'Data' = SUBSTRING(@text,stpos,COALESCE(NULLIF(endpos,0),LEN(@text)+1)-stpos)
FROM Split) dedup
SELECT @DEDUPTEXT
,它基本上是你已经在你的问题描述。 不知道这可能对你有帮助,随时downvote - 我会最终删除它。
感谢您展示答案。我仍然开放其他方式 – SriniV
您应该修复您的数据结构,并且不要将值列表存储为字符串。每个值应位于联结表中的单独行上。 –
这是一个很好的例子,说明为什么在一个列中存储CSV数据通常是一个糟糕的主意:它使得处理数据变得非常困难。对您来说最好的长期解决方案是将您的数据标准化。 –
我同意,这不是一个真实的案例。只是想知道是否有什么要解决这个问题。 – SriniV