sqlserver 字符串拆分和取某分隔符之前的字符串


ALTER FUNCTION [dbo].[f_splitSTR](  
    @s   varchar(8000),   --待分拆的字符串  
    @split varchar(10)     --數據分隔符  
)RETURNS @re TABLE(  
        col varchar(max))  
AS  
BEGIN  
    DECLARE   
        @splitlen int  
  
    -- 取分隔符的長度, 在分隔符后面加一個字符是為了避免分隔符以空格結束時, 取不到正確的長度  
    SET @splitlen = LEN(@split + 'a') - 2  
    -- 如果待分拆的字符串中存在數據分隔符, 則循環取出每個數據項  
    WHILE CHARINDEX(@split, @s)>0  
    BEGIN  
        -- 取第一個數據分隔符前的數據項  
        INSERT @re VALUES(LEFT(@s, CHARINDEX(@split, @s) - 1))  
          
        -- 將已經取出的第一個數據項和數據分隔符從待分拆的字符串中去掉  
        SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')  
    END  
      
    -- 保存最后一個數據項(最后一個數據項后面沒有數據分隔符, 故在前面的循環中不會被處理)  
    INSERT @re VALUES(@s)  
    RETURN     
  end  

例子:

 

原文忘記了出處。

  

 

取某分隔符之前的字符串(自己寫的函數,希望多多交流)

create FUNCTION [dbo].[fn_leftFirst]   
(  
    @source nvarchar(max), @split nvarchar(1000) 
)  
RETURNS nvarchar(max)  
AS  
BEGIN  
  if(CHARINDEX(@split, @source)>0)BEGIN
        return left(@source,CHARINDEX(@split, @source)-LEN(@split)+1)
    END
    return @source
END

 

 

20180809:字符串分隔方法二

今日寫sql語句時提示有SplitString函數,查了一下用法,值得推薦

select * from SplitString('待拆分的字符串','分隔符',返回值是否包含空串(bit))

示例:

select * from SplitString('201,202,203,3109,3179,3638,4384,4447,4462,3012',',',1)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM