2017-08-23 162 views
1

刚才对这种情况有了一个想法,其中包含数据'A,B,C,D,A,B,E,D'的列应该被删除为'A,B,C ,d,E”。我可以通过分割划分的值,重复和重新分两步来考虑这一点。我不确定是否有任何简单的方法来实现这一点,我是否错过了任何明显的东西?删除SQL列中的分隔文本

+1

您应该修复您的数据结构,并且不要将值列表存储为字符串。每个值应位于联结表中的单独行上。 –

+1

这是一个很好的例子,说明为什么在一个列中存储CSV数据通常是一个糟糕的主意:它使得处理数据变得非常困难。对您来说最好的长期解决方案是将您的数据标准化。 –

+0

我同意,这不是一个真实的案例。只是想知道是否有什么要解决这个问题。 – SriniV

回答

1

在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 - 我会最终删除它。

+0

感谢您展示答案。我仍然开放其他方式 – SriniV