栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从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)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447010.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号