Search code examples
sqlsql-servert-sqlsplit

How do I split a delimited string so I can access individual items?


Using SQL Server, how do I split a string so I can access item x?

Take a string "Hello John Smith". How can I split the string by space and access the item at index 1 which should return "John"?


Solution

  • You may find the solution in SQL User Defined Function to Parse a Delimited String helpful (from The Code Project).

    You can use this simple logic:

    Declare @products varchar(200) = '1|20|3|343|44|6|8765'
    Declare @individual varchar(20) = null
    
    WHILE LEN(@products) > 0
    BEGIN
        IF PATINDEX('%|%', @products) > 0
        BEGIN
            SET @individual = SUBSTRING(@products,
                                        0,
                                        PATINDEX('%|%', @products))
            SELECT @individual
    
            SET @products = SUBSTRING(@products,
                                      LEN(@individual + '|') + 1,
                                      LEN(@products))
        END
        ELSE
        BEGIN
            SET @individual = @products
            SET @products = NULL
            SELECT @individual
        END
    END