Luciano Evaristo Guerche

A brazilian geek interested in .NET technologies

About Me

Delimited List to Table

Peter Debetta published the article "Delimited List to Table" and stated in the article "I'm sure this could be optimized in a number of ways, and could also be made to trim extra spaces as well. If you have any suggestions, please add them as comments for one and all to see.".

I thought the function was too verbose for a function which just split a string into a table of values, so I optimized his function and I am posting here the result for appreciation. Any comments are welcome.

Regards,

Luciano Evaristo Guerche
Jacarei, SP, Brazil

 

CREATE FUNCTION dbo.Split2Table(@WhatToSplit varchar(8000), @Delimiter char(1))
RETURNS @ReturnTable TABLE (ListValue Sql_Variant)
AS
BEGIN
    DECLARE @StartAt int
    DECLARE @DelimiterPosition int

    SET @StartAt = 1
    SET @DelimiterPosition = COALESCE(NULLIF(CHARINDEX(@Delimiter, @WhatToSplit, @StartAt), 0), LEN(@WhatToSplit) + 1)
    WHILE @DelimiterPosition BETWEEN @StartAt AND LEN(@WhatToSplit) + 1
    BEGIN
        INSERT INTO @ReturnTable
        (ListValue)
        VALUES
        (SUBSTRING(@WhatToSplit, @StartAt, @DelimiterPosition - @StartAt))

        SET @StartAt = @DelimiterPosition + 1
        SET @DelimiterPosition = COALESCE(NULLIF(CHARINDEX(@Delimiter, @WhatToSplit, @StartAt), 0), LEN(@WhatToSplit) + 1)
    END
    RETURN
END
GO

/*
-- Some tests below

/*
-- Some tests below

/*
-- Some tests below

SELECT * FROM [dbo].[Split2Table]('', ',')
GO

SELECT * FROM [dbo].[Split2Table](',', ',')
GO

SELECT * FROM [dbo].[Split2Table]('a ,b ,c ,d ,e ', ',')
GO

SELECT * FROM [dbo].[Split2Table](' a, b, c, d, e', ',')
GO

SELECT * FROM [dbo].[Split2Table]('a,,b,,c,,d,,', ',')
GO
*/

 

Comments

TrackBack said:

# May 5, 2004 6:44 AM
Leave a Comment

(required) 

(required) 

(optional)

(required)