UFN_PARSE_STRING

Parses the string with provided delimiter

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@string varchar(max) IN
@delimiter varchar(3) IN

Definition

Copy


            CREATE function dbo.UFN_PARSE_STRING
        (        
            @string varchar(max), 
            @delimiter varchar(3)
        )
        RETURNS @isp_parse_string TABLE
            (
            element_id int NOT NULL IDENTITY(1,1),
            element_value varchar(250)
            )
        AS
             BEGIN
                DECLARE @end_pos int
                DECLARE @delimiter_length int
                DECLARE @err_msg varchar(250)


                SELECT @delimiter_length = DATALENGTH(@delimiter)
                SELECT @string = LTRIM(RTRIM(@string))

                -------------------------------------------------

                -- Remove trailing, leading delimiters

                -------------------------------------------------

                WHILE SUBSTRING(LTRIM(RTRIM(@string)), DATALENGTH(LTRIM(RTRIM(@string))) -@delimiter_length + 1, @delimiter_length) = @delimiter
                BEGIN
                    SELECT @string = SUBSTRING(LTRIM(RTRIM(@string)), 1,DATALENGTH(LTRIM(RTRIM(@string))) - @delimiter_length)
                END

                WHILE SUBSTRING(@string, 1, @delimiter_length) = @delimiter
                BEGIN
                    SELECT @string = SUBSTRING(@string, @delimiter_length + 1, DATALENGTH(@string) - @delimiter_length)
                END

                -------------------------------------------------

                -- Move through string and store values in temp table

                -------------------------------------------------

                SELECT @end_pos = CHARINDEX(@delimiter, @string)
                WHILE @end_pos <> 0 AND DATALENGTH(@string) > @delimiter_length
                BEGIN
                    IF @end_pos <> 1
                    BEGIN
                        INSERT INTO @isp_parse_string (element_value)
                        VALUES(SUBSTRING(@string, 1, @end_pos - 1))
                    END
                    SELECT     @string = SUBSTRING(@string, @end_pos +    @delimiter_length, DATALENGTH(@string) - @end_pos + @delimiter_length - 1)
                    SELECT @string = LTRIM(RTRIM(@string))
                    SELECT @end_pos = CHARINDEX(@delimiter, @string)
                END

                -------------------------------------------------

                -- Insert last value left and return list to caller

                -------------------------------------------------

                IF @string <> ''
                BEGIN
                    INSERT INTO @isp_parse_string(element_value) VALUES(@string)
                END

                RETURN
            END