写sql程序时,需要拆分字符串。在vb中提供有这样的函数,在其他的语言的类库中的string对象也提供有拆分一个字符串到数组中的split函数。
或许因为sql没有数组类型,因此没有创建这样的字符串处理函数。
sql没有数组类型,但是可以相似的有table类型数值。
自己写了一个自定义的split函数,以解决目前遇到的问题。
设计思路:函数输入值为一个字符类型(varchar之类的)的参数,返回一个table类型的结果。
定义如下:
1,参数定义和说明
输出参数:@splitString varchar(8000) -- 需要Split的字符串
@separate varchar(10) ---分隔符
返回:@returnTable table(col_Value varchar(20)) --单个字符长度可以按照需要修改
2,函数体
CREATE FUNCTION SplitStr (@splitString varchar(8000), @separate varchar(10))
RETURNS @returnTable table(col_Value varchar(20))
AS
BEGIN
declare @thisSplitStr varchar(20)
declare @thisSepIndex int
declare @lastSepIndex int
set @lastSepIndex = 0
if Right(@splitString ,len(@separate)) <> @separate set @splitString = @splitString + @separate
set @thisSepIndex = CharIndex(@separate,@splitString ,@lastSepIndex)
while @lastSepIndex <= @thisSepIndex
begin
set @thisSplitStr = SubString(@splitString ,@lastSepIndex,@thisSepIndex-@lastSepIndex)
set @lastSepIndex = @thisSepIndex + 1
set @thisSepIndex = CharIndex(@separate,@splitString ,@lastSepIndex)
insert into @returnTable values(@thisSplitStr)
end
return
END
使用实例:
结果:
col_value
------------------------------------------
123
456
789