微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLServer拆分字符串的三种方法

use tempdb

go

--测试数据

declare @s varchar(1000)

set @s='ak47,mp5,1,23'

 

/*要求输出结果

S

----

ak47

mp5

1

23

*/

 

--3方法对比:

 

--1.[朴实]动态Exec方法:

declare @s1 varchar(1000)

set @s1=right(replace(','+@s,',',''' as S union select '''),len(replace(',''' as S union select '''))-12)+''''

exec(@s1)

--2.[变通]表交叉方法:

select replace(reverse((left(s,charindex(',s)))),'') as S from(

select  r,reverse(left(@s,r))+',' as s

 from(

select   (select count(*) from sysobjects where name<=t.name ) as r

from sysobjects t 

  )a where r<=len(@s)

and left(@s+',r+1) like '%,'

)t order by r

--3.[高级]XML方法:

DECLARE @idoc int;

DECLARE @doc xml;

set @doc=cast('<Root><item><S>'+replace(@s,'</S></item><item><S>')+'</S></item></Root>' as xml)

EXEC sp_xml_preparedocument @Idoc OUTPUT, @doc

SELECT *   FROM OPENXML (@Idoc, '/Root/item',2)

   WITH (

            [S] varchar(10)

         )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐