因有一段時日...忘了當初從哪找到的
感謝分享的人
修改部分:
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