首页 > 代码库 > SQL字符串转换为数组

SQL字符串转换为数组

转载:http://hi.baidu.com/gagahjt/item/fd081316450f05028ebde413

 

/*
一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

 

-----rtrim(@str)去掉 @str右边的字符 ltrim(@str)去掉左边的字符 ltrim(rtrim(@str))去掉左右空格

-------charindex  在变量@str中@split的index即索引值

create function Get_StrArrayLength(  @str varchar(5000),  --要分割的字符串  @split varchar(10)  --分隔符号)returns intasbegin  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 @lengthend

 二、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便

create function Get_StrArrayStrOfIndex(  @str varchar(5000),  --要分割的字符串  @split varchar(10),  --分隔符号  @index int --取第几个元素)returns varchar(5000)asbegin  declare @location int  declare @start int  declare @next int  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   return substring(@str,@start,@location-@start)end

调用示例

--==================================declare @str varchar(5000)set @str=‘1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48‘print dbo.Get_StrArrayLength(@str,‘,‘)declare @next int declare @s varchar(100) set @next=1while @next<=dbo.Get_StrArrayLength(@str,‘,‘)begin  print dbo.Get_StrArrayStrOfIndex(@str,‘,‘,@next) ----输出数组中的值  set @next=@next+1end--==================================

 

四、检查一个元素是否在数组中

Create function CheckStrInArr(@s as varchar(50),@sArr as varchar(5000)) returns intas begindeclare @str varchar(5000)set @str=@sArrdeclare @next int  declare @ret intset @ret=0set @next=1while @next<=dbo.Get_StrArrayLength(@str,‘,‘)begin   if dbo.Get_StrArrayStrOfIndex(@str,‘,‘,@next)=@s   begin  set @ret=1;  end   set @next=@next+1endreturn @retend-- =========调用失利========declare @a intset @a=dbo.CheckStrInArr(‘8‘,‘2,3,5,8‘)select @a-- =========调用失利========

五 检查一个元素是否与数组中的相匹配

--select dbo.CheckStrLikeInArr(2,‘d‘,‘sde,df,aad,d,fgsa,fgd‘)Create function CheckStrLikeInArr(@liketype int=0,                      --like类型(0为为@keyword%,2为) 一般只用0@keyword as varchar(50),      --要检查的关键字@sArr as varchar(5000)        --数组) returns nvarchar(max)as begindeclare @str varchar(5000)   set @str=@sArrdeclare @start int declare @result nvarchar(max)   set @result=‘‘   set @start=1declare @temp nvarchar(20);while @start<=dbo.Get_StrArrayLength(@str,‘,‘)begin   if @liketype=0    begin     set @temp=dbo.Get_StrArrayStrOfIndex(@str,‘,‘,@start);       if @temp like ‘%‘+ @keyword+‘%‘       begin        set @result=@result+ @temp +‘,‘;       end      set @start=@start+1    end   else if @liketype=1    begin      if dbo.Get_StrArrayStrOfIndex(@str,‘,‘,@start) like ‘‘+ @keyword +‘%‘       begin          set @result=dbo.Get_StrArrayStrOfIndex(@str, ‘,‘ , @start)+‘,‘;       end      set @start=@start+1     end   else if @liketype=2    begin                           if dbo.Get_StrArrayStrOfIndex( @str, ‘,‘ , @start) like ‘%‘+ @keyword+‘‘       begin           set @result=dbo.Get_StrArrayStrOfIndex(@str, ‘,‘ , @start)+‘,‘;       end      set @start=@start+1    endendreturn @result--    return cast(dbo.Get_StrArrayLength(@result,‘,‘)as nvarchar(2000)) end

 

SQL字符串转换为数组