a. This function is used to split a given string and return the positional value

Example: 'ABC;DEF;GHI' is delimtied by ; and we need the positional values.

CREATE FUNCTION [dbo].[func_string_splitter_v2] (@DelimitedString [VARCHAR](8000),@Delimiter [VARCHAR](100),@pos [INT]) RETURNS VARCHAR(1000)
AS
BEGIN
    DECLARE
        @DelSize     INT = LEN(@Delimiter),
        @TokenCount  INT,
        @SearchPos   INT,
        @Index       INT,
        @Start       INT,
        @CurrentPos  INT = 0,
        @Value       VARCHAR(1000);

    -- how many pieces?
    SET @TokenCount = 
        (LEN(@DelimitedString) 
         - LEN(REPLACE(@DelimitedString, @Delimiter, '')))
        / @DelSize
        + 1;

    -- allow negative indexing
    IF @pos < 0
        SET @SearchPos = @TokenCount + 1 + @pos;
    ELSE
        SET @SearchPos = @pos;

    -- if out of bounds, bail out
    IF @SearchPos < 1 OR @SearchPos > @TokenCount
        RETURN NULL;

    -- walk the string until we hit the desired piece
    WHILE LEN(@DelimitedString) > 0
          AND @CurrentPos < @SearchPos
    BEGIN
        SET @Index = CHARINDEX(@Delimiter, @DelimitedString);

        IF @Index = 0
        BEGIN
            -- last piece
            SET @Value      = LTRIM(RTRIM(@DelimitedString));
            SET @CurrentPos = @CurrentPos + 1;
            BREAK;
        END
        ELSE
        BEGIN
            -- take everything up to the delimiter
            SET @Value      = LTRIM(RTRIM(SUBSTRING(@DelimitedString,1,@Index-1)));
            SET @Start      = @Index + @DelSize;
            SET @DelimitedString = 
                SUBSTRING(@DelimitedString,@Start,
                          LEN(@DelimitedString)-@Start+1);
            SET @CurrentPos = @CurrentPos + 1;
        END
    END

    RETURN @Value;
END
GO

Usage:

select [dbo].[func_string_splitter_v2]('abc;def;ghi',';',1)
abc

select [dbo].[func_string_splitter_v2]('abc;def;ghi',';',2)
def

select [dbo].[func_string_splitter_v2]('abc;def;ghi',';',0)
NULL

select [dbo].[func_string_splitter_v2]('abc;def;ghi',';',-1)
ghi