SQL Server replace, remove all after certain character SQL Server replace, remove all after certain character sql sql

SQL Server replace, remove all after certain character


Use LEFT combined with CHARINDEX:

UPDATE MyTableSET MyText = LEFT(MyText, CHARINDEX(';', MyText) - 1)WHERE CHARINDEX(';', MyText) > 0

Note that the WHERE clause skips updating rows in which there is no semicolon.

Here is some code to verify the SQL above works:

declare @MyTable table ([id] int primary key clustered, MyText varchar(100))insert into @MyTable ([id], MyText)select 1, 'some text; some more text'union all select 2, 'text again; even more text'union all select 3, 'text without a semicolon'union all select 4, null -- test NULLsunion all select 5, '' -- test empty stringunion all select 6, 'test 3 semicolons; second part; third part;'union all select 7, ';' -- test semicolon by itself    UPDATE @MyTableSET MyText = LEFT(MyText, CHARINDEX(';', MyText) - 1)WHERE CHARINDEX(';', MyText) > 0select * from @MyTable

I get the following results:

id MyText-- -------------------------1  some text2  text again3  text without a semicolon4  NULL5        (empty string)6  test 3 semicolons7        (empty string)


For the times when some fields have a ";" and some do not you can also add a semi-colon to the field and use the same method described.

SET MyText = LEFT(MyText+';', CHARINDEX(';',MyText+';')-1)


Could use CASE WHEN to leave those with no ';' alone.

    SELECT    CASE WHEN CHARINDEX(';', MyText) > 0 THEN    LEFT(MyText, CHARINDEX(';', MyText)-1) ELSE    MyText END    FROM MyTable