我有以下斜槓分隔例如字符串和需要分割他們:分割分隔字符串
Record---String
1--------ABC
2--------DEF/123
3--------GHI/456/XYZ
的字符串會始終有1 - 3件;不多也不少。
要分割他們,我一直在使用這個功能:
CREATE FUNCTION [dbo].[Split] (
@chunk VARCHAR(4000)
,@delimiter CHAR(1)
,@index INT
)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @curIndex INT = 0
,@pos INT = 1
,@prevPos INT = 0
,@result VARCHAR(1000)
WHILE @pos > 0
BEGIN
SET @pos = CHARINDEX(@delimiter, @chunk, @prevPos);
IF (@pos > 0)
BEGIN -- Characters between position and previous position
SET @result = SUBSTRING(@chunk, @prevPos, @pos - @prevPos)
END
ELSE
BEGIN -- Last Delim
SET @result = SUBSTRING(@chunk, @prevPos, LEN(@chunk))
END
IF (@index = @curIndex)
BEGIN
RETURN @result
END
SET @prevPos = @pos + 1
SET @curIndex = @curIndex + 1;
END
RETURN '' -- Else Empty
END
要分割的字符串,我調用這個函數像這樣:
MyField1 = dbo.Split(MyInputString, '/', 0),
MyField2 = dbo.Split(MyInputString, '/', 1),
MyField3 = dbo.Split(MyInputString, '/', 2)
預期的結果將是
Record 1:
MyField1 = ABC
MyField2 = NULL
MyField3 = NULL
Record 2:
MyField1 = DEF
MyField2 = 123
MyField3 = NULL
Record 3:
MyField1 = GHI
MyField2 = 456
MyField3 = XYZ
它幾乎是做我希望的,除了記錄1的MyField1的最後一個字符被截斷導致「AB」而不是「ABC」。我相信這是因爲這個單部分字符串沒有斜線分隔符。
不幸的是,我沒有寫這個函數,我的SQL技能有點弱。當字符串中沒有分隔符時,應該怎樣改變這個函數才能返回正確的結果?
看看這篇文章由亞倫貝特朗:HTTP: //sqlperformance.com/2012/07/t-sql-queries/split-strings – 2015-03-03 00:23:33