I wrote this for a much simpler extraction, but the idea should work.
/*****************************************************************
**** Parse A Delimited String Into A Table
*****************************************************************/
CREATE FUNCTION dbo.ParseByChar (
@Separator VARCHAR(20),
@String VARCHAR(MAX) )
RETURNS @TblSubString TABLE
(
VarSubString VARCHAR(10)
)
AS
BEGIN
DECLARE @intPos INT,
@SubStr VARCHAR(10)
-- Find The First Separator
SET @IntPos = CHARINDEX(@Separator, @String)
-- Loop Until There Is Nothing Left Of @String
WHILE @IntPos > 0
BEGIN
-- Extract The String
SET @SubStr = SUBSTRING(@String, 0, @IntPos)
-- Insert The String Into The Table
INSERT INTO @TblSubString (VarSubString) VALUES (@SubStr)
-- Remove The String & Separator From The Original
SET @String = SUBSTRING(@String, LEN(@SubStr) + 2, LEN(@String) - LEN(@SubStr) + 1)
-- SET @String = REPLACE(@String, @SubStr + ',', '', 1)
-- Get The New Index To The String
SET @IntPos = CHARINDEX(@Separator, @String)
END
-- Return The Last One
INSERT INTO @TblSubString (VarSubString) VALUES (@String)
RETURN
END
The call should be:
SELECT * FROM dbo.ParseByChar('|200911_s^3^', '2|200911_s^3^1988415|20091452_s^3^1988411|2009152_s^3^1988455|')
Needs some cleaning up, but the concept should work.
↧