2014年10月27日 星期一

在SQl Serverl 中模擬Split方式切割字串

有時候在DB欄位中會將資料以連結符號例如逗號串接成字串,如果我們希望將這類型的資料再取出成為其他子查詢的條件,可以先透過function將字串處理為table使用,function範例如下:

' 輸 入 值 : @String : 使用逗號或某種截斷符號的字串。
'     @Delimiter : 截斷符號。(通常為逗號)
'
' 回 傳 值 : 分割資料完成的資料表,欄位名稱為[SerialNo]。
'
CREATE FUNCTION BASE.fnSplit(@String nvarchar(max), @Delimiter char(1))
returns @temptable TABLE (SerialNo nvarchar(max))       
as       
begin       
    declare @idx int       
    declare @slice nvarchar(max)
      
    select @idx = 1       
        if len(@String)<1 or @String is null  return       
      
    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       
          
        if(len(@slice)>0)  
            insert into @temptable(SerialNo) values(@slice)       
  
        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return       
end  
GO
建立function後,就可以在SELECT語法中直接使用(注意[SchemaName]如果沒有指定Schema就不需要)
SELECT [SerialNo] from [SchemaName].fnSplit('1,2,3,4,5',',')
結果如下圖:

沒有留言:

張貼留言