TSQL Stored Procedure Split 字串

  • 660
  • 0

在SQL裡使用Split功能,回傳資料表

USE [DBName]
GO
/****** Object:  StoredProcedure [dbo].[sp_Tbl_SplitByStr]    Script Date: 2019/03/13 上午 09:20:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        mokmoe
-- Create date: 2019/03/13
-- Description: Split by String, Return Table(idx,splitedStr) by Select
-- =============================================
ALTER PROCEDURE [dbo].[sp_Tbl_SplitByStr]
    @splitSrc nvarchar(max),
    @splitSign nvarchar(max)
AS
BEGIN
    SET NOCOUNT ON;

    declare @varMatchPart varchar(200)
    -- 加入idx,方便迴圈取用
    declare @splitedTbl Table (idx int identity(1,1),splitedStr varchar(max))
    BEGIN
        WHILE PATINDEX('%'+@splitSign+'%', @splitSrc) > 0
        BEGIN
            set @varMatchPart=''
            --取出第一段字串
            select @varMatchPart=substring(@splitSrc,1,PATINDEX('%'+@splitSign+'%', @splitSrc)-1)
            --刪除已擷取字串
            select @splitSrc=STUFF(@splitSrc,1,len(@varMatchPart)+len(@splitSign),'')
            --空值不要
            IF (@varMatchPart <> '') 
            BEGIN
                insert @splitedTbl (splitedStr) values(@varMatchPart)
            END
        END
            --加回最後一段字串
            select @varMatchPart=substring(@splitSrc,1,len(@splitSrc))
            insert @splitedTbl (splitedStr) values(@varMatchPart)
    END
    --以資料表方式回傳資訊
    select * from @splitedTbl    
END