2016年10月3日 星期一

MSSQL-字串分割Split

字串分割Split (轉貼)
因有一段時日...忘了當初從哪找到的
感謝分享的人

修改部分:
    1.回傳String,所以第三欄取第N個
    2.若為 0 回傳全部

CREATE FUNCTION [dbo].[Split]
( 
 @Words nvarchar(MAX)/*原始字串*/
 , @splitStr varchar(50) /*分割字元*/
 , @rowNumber int /*取第n個*/
)
RETURNS nvarchar(MAX)
WITH EXECUTE AS CALLER
AS
BEGIN
    Declare @word nvarchar(max)
    Declare @TempStr nvarchar(MAX)
    Declare @i int =1
   
    WHILE (CHARINDEX(@splitStr,@Words)>0)/*@Words有包含分割字元就一直執行迴圈*/
 BEGIN
  Set @TempStr=SUBSTRING(@Words,1,CHARINDEX(@splitStr,@Words)-1)/*取出最前面的word*/
  If (@rowNumber=0 or @i=@rowNumber)
  begin
   set @word = @TempStr
  end
  Set @Words = REPLACE(@Words,@TempStr+@splitStr,'')/*把最前面的word加上分割字元後,取代為空字串再指派回給@Words*/
  set @i= @i+1
 END/*End While*/
 
 IF(LEN(RTRIM(LTRIM(@Words)))>0 And CHARINDEX(@splitStr,RTRIM(LTRIM(@Words)))=0) /*@Words有值但沒有分割字元,表示此為最後一個word*/
 Begin
     Set @TempStr=@Words /*取出word*/
  If (@rowNumber=0 or @i=@rowNumber)
  begin
   set @word=@TempStr
     end
 End /*End IF*/

 RETURN @word/*回傳table變數*/
END