MSSQL_Split功能函數

  • 3071
  • 0

摘要:MSSQL_Split功能函數

USE [PublicDBA]
GO
/****** Object:  UserDefinedFunction [dbo].[func_Split]    Script Date: 01/02/2012 14:15:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ===============================================================   
-- Author:        
-- Create date:   
-- Description: [MS-SQL] Split 功能。( 將字串分解成Table欄位Rows )    
-- ===============================================================   

/*  Funtion「呼叫範例」   
    -----------------------------------------------------------------------------   
    Select  *    
    From    Split(',' , '謝,謝,你,9,5,2,7,!')   
    --- OR ----------------------------------------------------   
    Select  *    
    From    Split('$' , '謝$謝$你$9$5$2$7$!')   
    -----------------------------------------------------------------------------   
*/  

ALTER FUNCTION [dbo].[func_Split]    
(      
    @Separator nvarchar(10),        -- 分隔符號   
    @StringToSplit nvarchar(max)    -- 字串集 (如上「呼叫範例」)   
)   
RETURNS @tTable table ([Row_Index] int, [String] nvarchar(max))   
BEGIN  
  
    DECLARE @Count int  
    --DECLARE @tTable table(ROW_INDEX int, String nvarchar(max))   
    DECLARE @NextString nvarchar(max)   
    DECLARE @SplitPosition int  
    DECLARE @NextPosition int  
    DECLARE @SplitCheck nvarchar(1)   

    Set @Count = 0;   
    Set @NextString = ''  
    Set @SplitCheck = Right(@StringToSplit,Len(@Separator))    
  
    -- 如果字串最後不是分隔符號,則一直執行迴圈   
    IF (@SplitCheck <> @Separator )   
        Begin  
            Set @StringToSplit = @StringToSplit + @Separator   
        End  
  
    -- 取得第一個分隔符號位置   
    Set @SplitPosition = CharIndex(@Separator,@StringToSplit)   
    Set @NextPosition = 1   
  
    -- 取得其他分隔符號位置,並Insert到Table中   
    WHILE (@SplitPosition <>  0)     
        Begin  
            Set @Count = @Count + 1   
            Set @NextString = SubString(@StringToSplit,1,@SplitPosition-1)   

            Insert Into @tTable ([ROW_INDEX],[String]) Values (@Count,@NextString)
  
            Set @StringToSplit = SubString(@StringToSplit,@SplitPosition + Len(@Separator),Len(@StringToSplit))   
            Set @NextPosition = @SplitPosition   
            Set @SplitPosition  = CharIndex(@Separator,@StringToSplit)   
        End  
  
    RETURN  
END