SQL Server 完美SPLIT函数

-- SQL Server Split函数 
 --
 Author:zc_0101  
 --
 说明: 
 --
 支持分割符多字节 
 --
 使用方法  
 --
 Select * FROM DBO.F_SQLSERVER_SPLIT('1203401230105045','0')     
 --
 select * from DBO.F_SQLSERVER_SPLIT('abc1234a12348991234','1234')  
 --
 Select * from DBO.F_SQLSERVER_SPLIT('ABC',',')    
 
 
 
 
CREATE   FUNCTION  F_SQLSERVER_SPLIT( @Long_str   varchar ( 8000 ), @split_str   varchar ( 100 ))    
 
RETURNS    @tmp   TABLE (        
     ID          
 inT       IDENTITY   PRIMARY   KEY ,      
     short_str   
 varchar ( 8000 )    
 )    
 
AS    
 
BEGIN    
     
 DECLARE   @long_str_Tmp   varchar ( 8000 ), @short_str   varchar ( 8000 ), @split_str_length   int    
     
 SET   @split_str_length   =   LEN ( @split_str )    
     
 IF   CHARINDEX ( @split_str , @Long_str ) = 1  
          
 SET   @long_str_Tmp = SUBSTRING ( @Long_str , @split_str_length + 1 , LEN ( @Long_str ) - @split_str_length )
     
 ELSE 
          
 SET   @long_str_Tmp = @Long_str 
     
 IF   CHARINDEX ( REVERSE ( @split_str ), REVERSE ( @long_str_Tmp )) > 1     
         
 SET   @long_str_Tmp = @long_str_Tmp + @split_str     
     
 ELSE    
         
 SET   @long_str_Tmp = @long_str_Tmp     
     
 IF   CHARINDEX ( @split_str , @long_str_Tmp ) = 0 
         
 Insert   INTO   @tmp   select   @long_str_Tmp  
     
 ELSE 
         
 BEGIN 
             
 WHILE   CHARINDEX ( @split_str , @long_str_Tmp ) > 0     
                 
 BEGIN    
                     
 SET   @short_str = SUBSTRING ( @long_str_Tmp , 1 , CHARINDEX ( @split_str , @long_str_Tmp ) - 1 )    
                     
 DECLARE   @long_str_Tmp_LEN   INT , @split_str_Position_END   int    
                     
 SET   @long_str_Tmp_LEN   =   LEN ( @long_str_Tmp )    
                     
 SET   @split_str_Position_END   =   LEN ( @short_str ) + @split_str_length     
                     
 SET   @long_str_Tmp = REVERSE ( SUBSTRING ( REVERSE ( @long_str_Tmp ), 1 , @long_str_Tmp_LEN - @split_str_Position_END ))
                     
 IF   @short_str <> ''   Insert   INTO   @tmp   select   @short_str     
                 
 END            
         
 END 
     
 RETURN      
 
END  
原文地址:https://www.cnblogs.com/tongdengquan/p/6090528.html