"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to Safely Split Strings in T-SQL Using Delimiters?

How to Safely Split Strings in T-SQL Using Delimiters?

Posted on 2025-03-24
Browse:419

How to Safely Split Strings in T-SQL Using Delimiters?

Segment string based on delimiter in T-SQL

question:

In SQL, using SUBSTRING to split strings based on delimiters can cause errors when the delimiter does not exist. The following code demonstrates this:

SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName,
       SUBSTRING(myColumn, CHARINDEX('/', myColumn)   1, 1000) AS LastName
FROM   MyTable

When a line without a delimiter is encountered, it throws an error: "The length parameter passed to the LEFT or SUBSTRING function is invalid."

Solution:

To solve this problem, you can use the CASE statement in the SUBSTRING function as shown below:

SELECT SUBSTRING(myColumn, 1, CASE CHARINDEX('/', myColumn)
            WHEN 0
                THEN LEN(myColumn)
            ELSE CHARINDEX('/', myColumn) - 1
            END) AS FirstName
    ,SUBSTRING(myColumn, CASE CHARINDEX('/', myColumn)
            WHEN 0
                THEN LEN(myColumn)   1
            ELSE CHARINDEX('/', myColumn)   1
            END, 1000) AS LastName
FROM MyTable

This updated code uses CHARINDEX to evaluate the position of the delimiter. If the delimiter is not found (CHARINDEX returns 0), the CASE statement uses the length of the string to ensure that the entire string is treated as a name. If a delimiter exists, it calculates the position of the first character after the delimiter as the starting index of the last name.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3