自写的几个常用Sql字符串拆分函数

--用指定的字符拆分一个字符串,并传入一个字符串判断传入的这个字符串是否存在于拆分以后的字符串数组中
create function SplitString(@expression varchar(500),@char varchar(10),@str varchar(50))  
 returns bit  
as  
begin   
 --如果传进来的字符串是null则返回0   
 if(isnull(@expression,' ')=' ')
    return 0
 declare @beginIndex int,@endIndex int  --截取子串的起始索引和结束索引      
 declare @Count int --记录循环的次数  
 set @beginIndex=1--注意:Sql中字符串的索引是从1开始  
 set @Count=0  
 while(1=1)  
 begin  
  set @Count=@Count+1  
  set @endIndex=charindex(@char,@expression,@beginIndex)  
  --如果没有找到分隔符,则将整个要分割的串与需要判断的串对比  
  if(@endIndex=0)  
  begin  
   --如果是第一次截取子串  
   if(@Count=1)  
   begin  
    if(@expression=@str)  
    begin  
     return 1  
    end  
    begin  
     return 0  
    end   
   end   
            else --如果是最后一次截取子串,则将最后一个分隔符后面的字符串取出来与需要判断的串对比  
   begin  
     if(@str=substring(@expression,@beginIndex,len(@expression)-@beginIndex+1))  
     begin  
      return 1  
     end  
     else  
     begin  
      return 0  
     end  
   end      
  end  
    
  --如果匹配,则返回1  
        if(@str=substring(@expression,@beginIndex,@endIndex-@beginIndex))  
  begin  
   return 1  
  end  
  else  --如果不匹配则继续寻找  
  begin  
   set @beginIndex=@endIndex+1  
  end  
 end   
    return 0  
end  




--用指定的字符拆分一个字符串,并传入一个索引,返回拆分后指定索引的字串(索引从1开始)
create function IndexOfArray(@expression varchar(500),@char varchar(10),@Index int)
    returns varchar(200)
as
begin    
    declare @beginIndex int,@endIndex int  --截取子串的起始索引和结束索引    
    declare @Count int --记录循环的次数
    set @beginIndex=1 --注意:Sql中字符串的索引是从1开始
    set @Count=0
    while(1=1)
    begin
        set @Count=@Count+1
        set @endIndex=charindex(@char,@expression,@beginIndex)
        
        --如果没有找到分隔符,则截取最后一个分隔符到字符串末尾的子串
        if(@endIndex=0)
        begin
            return substring(@expression,@beginIndex,len(@expression)-@beginIndex+1)
        end        

        --如果这一次截取出来的字符串的索引是指定索引,则返回截取出来的字符串
            if(@Count=@Index)
        begin    
            return substring(@expression,@beginIndex,@endIndex-@beginIndex)            
        end
        else  --否则继续
        begin
            set @beginIndex=@endIndex+1
            continue
        end
    end    
    return ''
end
go


--用指定的字符拆分一个字符串,并传入一个字符串判断传入的这个字符串
--是否与拆分以后的字符串数组中指定索引的字符串相等
create function SplitEquare(@expression varchar(200),@char varchar(10),@Index int,@str varchar(100))
returns bit
as
begin
    declare @SplitStr varchar(100)
    set @SplitStr=dbo.IndexOfArray(@expression,@char,@Index)
    if(@SplitStr=@str)
    begin
        return 1
    end
    else
    begin
        return 0
    end
    return 0
end
go
原文地址:https://www.cnblogs.com/mxw09/p/1873340.html