本文介紹了如何在SQL Server 2016中將字符串中的重復(fù)項(xiàng)從表中刪除的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我得到了一個(gè)包含一列字符串列的表。這些字符串由;
分隔?,F(xiàn)在,我想在拆分字符串后刪除重復(fù)項(xiàng)。例如:
-----------
| w;w;e;e |
-----------
| q;r;r;q |
-----------
| b;n;n;b |
-----------
結(jié)果應(yīng)為:
-------
| w;e |
-------
| q;r |
-------
| b;n |
-------
此外,它不應(yīng)該是Select
函數(shù),而應(yīng)該是delete
函數(shù)(不是100%確定的)。因此原始表中的值將不再重復(fù)。
推薦答案
對(duì)于update
語(yǔ)句,這將消除您的列的重復(fù)項(xiàng):
update t
set col = stuff((
select distinct
';'+s.Value
from string_split(t.col,';') as s
for xml path (''), type).value('.','varchar(1024)')
,1,1,'');
在SQL SERVER 2016中,您可以使用string_split()
和stuff()
with select ... for xml path ('')
method of string concatenation僅連接不同的值。
select
t.id
, t.col
, dedup = stuff((
select distinct
';'+s.Value
from string_split(t.col,';') as s
for xml path (''), type).value('.','varchar(1024)')
,1,1,'')
from t
dbfiddle演示:here
rextester demo:http://rextester.com/MAME55141;此demo在string_split()
缺席的情況下使用Jeff Moden的CSV拆分器函數(shù)。
退貨:
+----+---------+-------+
| id | col | dedup |
+----+---------+-------+
| 1 | w;w;e;e | e;w |
| 2 | q;r;r;q | q;r |
| 3 | b;n;n;b | b;n |
+----+---------+-------+
拆分字符串引用:
Tally OH! An Improved SQL 8K “CSV Splitter” Function – Jeff Moden
Splitting Strings : A Follow-Up – Aaron Bertrand
Split strings the right way – or the next best way – Aaron Bertrand
string_split()
in SQL Server 2016 : Follow-Up #1 – Aaron Bertrand
這篇關(guān)于如何在SQL Server 2016中將字符串中的重復(fù)項(xiàng)從表中刪除的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,