Fork me on GitHub
.net求学者

Sql将逗号分隔的字符串分拆成表格的方法

--拆分的方法有很多,临时表.SUBSTRING ...但都不如XML来得清凉爽快
declare @tempstr varchar(500)
set @tempstr='54,57,55,56,59'
declare @Xmlstr xml
set @Xmlstr=Co nVERT(xml,'<root><v>' + REPLACE(@tempstr, ',', '</v><v>') + '</v></root>') 
SELECT  ids=N.v.value('.', 'int')  FROM @Xmlstr.nodes('/root/v') N(v)
--写成函数如下:
create FUNCTIo n [dbo].[ufn_sys_Str2Table]
    (
      @SplitStr nvarchar(max),
      @Separator nvarchar(10) = ','
    )
RETURNS @ResultTable TABLE
    (    
      [sid] INT IDENTITY(1, 1) ,
      [svalue] nvarchar(max)
    )
as
begin
--把字串转成XML
declare @Tempxml xml;
set @Tempxml=Co nVERT(xml,'<d>'+REPLACE(@SplitStr,@Separator,'</d><d>')+'</d>')
--把XML转成表
insert into @ResultTable ([svalue])
select co nvert(nvarchar(max),Tb.co.query('data(.)') ) as rvalue from @Tempxml.nodes('/d') Tb(co)
RETURN ;
end

 

posted @ 2014-01-16 11:02  hy31337  阅读(413)  评论(0编辑  收藏  举报
.net求学者