zoukankan      html  css  js  c++  java
  • 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  
  • 相关阅读:
    day_07 深浅拷贝
    day_06 再谈编码
    day_05 字典
    day_04 列表
    day_03 字符串
    HDU 1049 Climbing Worm
    HDU 1720 A+B Coming
    Pascal向C++的跨越
    B-Boxes
    喵哈哈村的狼人杀大战(4)
  • 原文地址:https://www.cnblogs.com/tongdengquan/p/6090528.html
Copyright © 2011-2022 走看看