2017-08-23 160 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