USE [TEMPDB]
GO
/****** Object: UserDefinedFunction [dbo].[SplitStr] Script Date: 2017/7/28 下午 04:32:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date: 20150212
-- Description: for Split Str
--select [dbo].[SplitStr]('F123456789,Male,台北市松山區,0921111111',',','1','N') ##得到 F123456789
--select [dbo].[SplitStr]('F123456789,Male,台北市松山區,0921111111',',','2','N') ##得到 Male
--select [dbo].[SplitStr]('F123456789,Male,台北市松山區,0921111111',',','3','N') ##得到 台北市松山區
-- =============================================
ALTER FUNCTION [dbo].[SplitStr]
(
@InputStr VARCHAR(500), --拆解字串
@Delimiter CHAR(1), --拆解符號
@Position int, --取第幾個位置
@ItSelf CHAR(1) = 'N' --回傳本身的資料???
)
RETURNS VARCHAR(500)
AS
BEGIN
DECLARE @RETURNSTR varchar(500)
DECLARE @SplitStr VARCHAR(500)
Declare @NextString varchar(500)
Declare @Pos int
Declare @FirstPos int
Declare @PosCnt int
SET @RETURNSTR = @InputStr --回傳本身的資料
SET @PosCnt = 0
Set @SplitStr = @InputStr + @Delimiter --這樣若無分隔符號也才能傳回自已本身
Set @Pos = charindex(@Delimiter, @SplitStr,1)
Set @FirstPos = charindex(@Delimiter, @InputStr,1) --若沒有任何的分隔符號,則不用進入拆資料
While (@FirstPos <> 0)
Begin
Set @PosCnt = @PosCnt + 1
Set @RETURNSTR = Substring(@SplitStr,1,@Pos-1)
Set @SplitStr = substring(@SplitStr,@Pos+1,len(@SplitStr))
IF @PosCnt = @Position
Begin
RETURN @RETURNSTR
End
Set @Pos = charindex(@Delimiter, @SplitStr)
IF @Pos = 0
Begin
RETURN ''
End
End
IF (@ItSelf = 'N')
BEGIN
RETURN ''
END
ELSE
BEGIN
RETURN @InputStr
END
RETURN ''
END