这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’,',’)
测试结果
最后感谢一下提供源码的兄弟,原文见Split Function in Sql Server to break Comma-Separated Strings into Table