如何从SQL中的字符串中删除重复项

如何从SQL中的字符串中删除重复项,第1张

如何从SQL中的字符串中删除重复项

具有解析功能的选项1

Declare @YourTable table (ID int,YourCol varchar(50))Insert Into @YourTable values(1,'qw"qw"er"er'),(2,'q"w"w"q'),(3,'f"k"s"g')Select A.ID      ,A.YourCol      ,DeDuped   = Stuff((Select '"' + RetVal      From (Select RetSeq=Min(RetSeq),RetVal  From  [dbo].[udf-Str-Parse](A.YourCol,'"')  Group By RetVal) P        Order by 1 For XML Path('')),1,1,'')  From  @YourTable A

退货

ID  YourCol      DeDuped1   qw"qw"er"er  qw"er2   q"w"w"q      q"w3   f"k"s"g      f"k"s"g

选项2:不带解析功能

Declare @YourTable table (ID int,YourCol varchar(50))Insert Into @YourTable values(1,'qw"qw"er"er'),(2,'q"w"w"q'),(3,'f"k"s"g')Select A.ID      ,A.YourCol      ,DeDuped   = Stuff((Select '"' + RetVal      From (Select RetSeq=Min(RetSeq),RetVal  From  (Select RetSeq = Row_Number() over (Order By (Select null))      ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))From  (Select x = Cast('<x>' + replace((Select replace(A.YourCol,'"','搂搂Split搂搂') as [*] For XML Path('')),'搂搂Split搂搂','</x><x>')+'</x>' as xml).query('.')) as A Cross Apply x.nodes('x') AS B(i)       ) P1 Group By RetVal) P        Order by RetSeq       For XML Path('')),1,1,'')  From  @YourTable A

退货

ID  YourCol      DeDuped1   qw"qw"er"er  qw"er2   q"w"w"q      q"w3   f"k"s"g      f"k"s"g

UDF(如果有兴趣)

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))Returns Table AsReturn (      Select RetSeq = Row_Number() over (Order By (Select null))          ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))    From  (Select x = Cast('<x>' + replace((Select replace(@String,@Delimiter,'搂搂Split搂搂') as [*] For XML Path('')),'搂搂Split搂搂','</x><x>')+'</x>' as xml).query('.')) as A     Cross Apply x.nodes('x') AS B(i));--Thanks Shnugo for making this XML safe--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')--Select * from [dbo].[udf-Str-Parse]('this,is,<test>,for,< & >',',')--Performance On a 5,000 random sample -8K 77.8ms, -1M 79ms (+1.16), -- 91.66ms (+13.8)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5165882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存