createfunctionf_split(@SourceSqlvarchar(8000),@StrSepratevarchar(10)) returns@temptable(avarchar(100)) --实现split功能的函数 --date:2003-10-14 as begin declare@iint set@SourceSql=rtrim(ltrim(@SourceSql))--去掉字符中的空格 set@i=charindex(@StrSeprate,@SourceSql)--找分割符在字符中的位置 while@i>=1 begin insert@tempvalues(left(@SourceSql,@i-1)) set@SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set@i=charindex(@StrSeprate,@SourceSql) end if@SourceSql<>'' insert@tempvalues(@SourceSql) return end
返回的是一个table,所以执行要用如下格式:select * from dbo.f_split('ABC:BC:C:D:E',':')
CREATEFUNCTION[dbo].[split] (@strnvarchar(4000),@codevarchar(10),@noint) RETURNSvarchar(200) AS BEGIN declare@intLenint declare@countint declare@indexbint declare@indexeint set@intLen=len(@code) set@count=0 set@indexb=1 if@no=0 ifcharindex(@code,@str,@indexb)<>0 returnleft(@str,charindex(@code,@str,@indexb)-1) else return@str whilecharindex(@code,@str,@indexb)<>0 begin set@count=@count+1 if@count=@no break set@indexb=@intLen+charindex(@code,@str,@indexb) end if@count=@no begin set@indexe=@intLen+charindex(@code,@str,@indexb) ifcharindex(@code,@str,@indexe)<>0 returnsubstring(@str,charindex(@code,@str,@indexb)+len(@code),charindex(@code,@str,@indexe)-charindex(@code,@str,@indexb)-len(@code)) else returnright(@str,len(@str)-charindex(@code,@str,@indexb)-len(@code)+1) end return'' END
---------------------------------
CREATEFunctionf_trimstr(@strvarchar(100)) returnsvarchar(100) --功能:去掉字符串中的所有空格 AS begin declare@iint declare@s1varchar(50) declare@resultvarchar(100) declare@lenint select@result='' select@str=ltrim(rtrim(@str)) select@len=len(@str) select@i=1 while@i<=@len begin select@s1=substring(@str,@i,1) if(@s1<>'') begin select@result=@result+@s1 end select@i=@i+1 end return@result end
CREATEFUNCTION[dbo].[split] (@strnvarchar(4000),@codevarchar(10),@noint) RETURNSvarchar(200) AS BEGIN declare@intLenint declare@countint declare@indexbint declare@indexeint set@intLen=len(@code) set@count=0 set@indexb=1 if@no=0 ifcharindex(@code,@str,@indexb)<>0 returnleft(@str,charindex(@code,@str,@indexb)-1) else return@str whilecharindex(@code,@str,@indexb)<>0 begin set@count=@count+1 if@count=@no break set@indexb=@intLen+charindex(@code,@str,@indexb) end if@count=@no begin set@indexe=@intLen+charindex(@code,@str,@indexb) ifcharindex(@code,@str,@indexe)<>0 returnsubstring(@str,charindex(@code,@str,@indexb)+len(@code),charindex(@code,@str,@indexe)-charindex(@code,@str,@indexb)-len(@code)) else returnright(@str,len(@str)-charindex(@code,@str,@indexb)-len(@code)+1) end return'' END