SQL Server里用Split函数分割字符串

这2天在写存储过程的时候发现SQL里没有Split函数在需要分割字符串的时候很是不方便,比如有时候存储过程某个参数是个用逗号做分隔符的字符串,就需要用到Split了。本着不重复制造轮子的原则,先上网搜索了一下,果然已经有兄弟实现了Split方法并且无私共享了代码。

CREATEFUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (items varchar(8000))
as
begin
    declare @idx int
    declare @slice varchar(8000)
    select @idx = 1
          iflen(@String)<1 or @String isnullreturn
    while @idx!= 0
    begin
        set @idx =charindex(@Delimiter,@String)
        if @idx!=0
            set @slice =left(@String,@idx - 1)
        else
            set @slice = @String
        if(len(@slice)>0)
            insertinto @temptable(items)values(@slice)
        set @String =right(@String,len(@String)- @idx)
        iflen(@String)= 0 break
    end
return
end

只需要运行以上SQL,将其保存成名为Split的Table-Valued function,就可以像C#一样在SQL里使用Split了,例子如下

select top 10 * from dbo.split(‘Chennai,Bangalore,Mumbai’,’,’)

测试结果如下图所示

image

最后感谢一下提供源码的兄弟,原文见Split Function in Sql Server to break Comma-Separated Strings into Table


Comments

17 responses to “SQL Server里用Split函数分割字符串”

Leave a Reply