[MS SQL] 字串分割後轉成Table

之前在網路上找到一個資料庫函數,還蠻常用到的,寫下來記錄一下。

(因為時間太久實在忘記出處了,若知道者請告知一下,我會馬上註明出處。)

輸入字串:A001,A002,A003

輸  出:
sno    data
------------
1       A001
2       A002
3       A003


CREATE Function [dbo].[uf_split_str]
( 
@InStr nvarchar(2000) , --@InStr: 輸入字串。EX: A001,A002,A003
@s_char nvarchar(1)     --@s_char: 分割字元。EX: ','
) 

Returns @tb Table ( sno int , data nvarchar(100) ) 

As 
Begin 
    Set @InStr = @s_char + @InStr + @s_char; 
    Declare @p1 Int , @p2 Int , @data nvarchar(100) , @sno int; 
    Set @p1 = -1 ; Set @p2 = -1 ; Set @data = '' ; Set @sno = 0; 
    While ( 0 Not In (@P1,@P2) ) Begin 
   Set @p1 = CharIndex(@s_char,@InStr,@p1+1); 
   Set @p2 = CharIndex(@s_char,@InStr,@p1+1); 
   If ( 0 In (@p1,@p2) )  
    Break; 
   Set @data = SubString(@InStr,@p1+1,@p2-@p1-1); 
   if ( @data <> '' ) Begin 
    Set @sno = @sno +1; 
    Insert Into @tb ( sno , data ) Values ( @sno , @data ) 
   End 
    End  
    Return 
End 

留言

這個網誌中的熱門文章

[MS SQL] 使用PIVOT 做兩個欄位的交叉分析(動態欄位)

[ASP.NET] Gridview動態增加欄位與Null值處理

[MS SQL] 將輸入的時間(分、秒)轉換成中文時間的函數