• 1、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。
  • CREATEfunction Get_StrArrayLength
  • (
  • @str varchar(1024), --要分割的字符串
  • @split varchar(10) --分隔符号
  • )
  • returnsint
  • as
  • begin
  • declare @location int
  • declare @start int
  • declare @length int
  • set @str=ltrim(rtrim(@str))
  • set @location=charindex(@split,@str)
  • set @length=1
  • while @location<>0
  • begin
  • set @start=@location+1
  • set @location=charindex(@split,@str,@start)
  • set @length=@length+1
  • end
  • return @length
  • end
  • 调用示例:select dbo.Get_StrArrayLength('78,1,2,3',',')
  • 返回值:4
  • 二、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便
  • CREATEfunction Get_StrArrayStrOfIndex
  • (
  • @str varchar(1024), --要分割的字符串
  • @split varchar(10), --分隔符号
  • @indexint--取第几个元素
  • )
  • returnsvarchar(1024)
  • as
  • begin
  • declare @location int
  • declare @start int
  • declare @nextint
  • declare @seed int
  • set @str=ltrim(rtrim(@str))
  • set @start=1
  • set @next=1
  • set @seed=len(@split)
  • set @location=charindex(@split,@str)
  • while @location<>0 and @index>@next
  • begin
  • set @start=@location+@seed
  • set @location=charindex(@split,@str,@start)
  • set @next=@next+1
  • end
  • if @location =0 select @location =len(@str)+1
  • --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
  • returnsubstring(@str,@start,@location-@start)
  • end
  • 调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)
  • 返回值:9
  • 三、结合上边两个函数,象数组一样遍历字符串中的元素
  • createfunction f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100))
  • returns @temptable(F1 varchar(100))
  • as
  • begin
  • declare @ch asvarchar(100)
  • set @SourceSql=@SourceSql+@StrSeprate
  • while(@SourceSql<>'')
  • begin
  • set @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)
  • insert @tempvalues(@ch)
  • set @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')
  • end
  • return
  • end
  • ----调用
  • select * from dbo.f_splitstr('1,2,3,4',',')
  • --结果:
  • 1
  • 2
  • 3
  • 4
posted on 2013-06-05 18:51  Kelly_HanShuai  阅读(170)  评论(0)    收藏  举报