数据库分割字符串函数

  1. 一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。  
  2.   
  3. CREATE function Get_StrArrayLength  
  4. (  
  5.   @str varchar(1024),  --要分割的字符串  
  6.   @split varchar(10)  --分隔符号  
  7. )  
  8. returns int  
  9. as  
  10. begin  
  11.   declare @location int  
  12.   declare @start int  
  13.   declare @length int  
  14.   
  15.   set @str=ltrim(rtrim(@str))  
  16.   set @location=charindex(@split,@str)  
  17.   set @length=1  
  18.   while @location<>0  
  19.   begin  
  20.     set @start=@location+1  
  21.     set @location=charindex(@split,@str,@start)  
  22.     set @length=@length+1  
  23.   end  
  24.   return @length  
  25. end  
  26. 调用示例:select dbo.Get_StrArrayLength('78,1,2,3',',')  
  27. 返回值:4  
  28.   
  29. 二、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便  
  30.   
  31. CREATE function Get_StrArrayStrOfIndex  
  32. (  
  33.   @str varchar(1024),  --要分割的字符串  
  34.   @split varchar(10),  --分隔符号  
  35.   @index int --取第几个元素  
  36. )  
  37. returns varchar(1024)  
  38. as  
  39. begin  
  40.   declare @location int  
  41.   declare @start int  
  42.   declare @next int  
  43.   declare @seed int  
  44.   
  45.   set @str=ltrim(rtrim(@str))  
  46.   set @start=1  
  47.   set @next=1  
  48.   set @seed=len(@split)  
  49.     
  50.   set @location=charindex(@split,@str)  
  51.   while @location<>0 and @index>@next  
  52.   begin  
  53.     set @start=@location+@seed  
  54.     set @location=charindex(@split,@str,@start)  
  55.     set @next=@next+1  
  56.   end  
  57.   if @location =0 select @location =len(@str)+1  
  58.  --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。  
  59.     
  60.   return substring(@str,@start,@location-@start)  
  61. end  
  62. 调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)  
  63. 返回值:9  
  64.   
  65. 三、结合上边两个函数,象数组一样遍历字符串中的元素  
  66.   
  67. create   function   f_splitstr(@SourceSql   varchar(8000),@StrSeprate   varchar(100))     
  68.   returns   @temp   table(F1   varchar(100))     
  69.   as       
  70.   begin     
  71.   declare   @ch   as   varchar(100)     
  72.   set   @SourceSql=@SourceSql+@StrSeprate       
  73.   while(@SourceSql<>'')     
  74.                   begin     
  75.                   set   @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)     
  76.   insert   @temp   values(@ch)     
  77.   set   @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')     
  78.                   end     
  79.   return     
  80.   end     
  81.       
  82.   
  83. ----调用  
  84.   select   *   from   dbo.f_splitstr('1,2,3,4',',')   
  85. --结果:  
posted @ 2012-08-09 16:51  看看我的眼神  阅读(987)  评论(0)    收藏  举报