支持分割符多字节

-- 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值