Skip to content
Advertisement

SQL replace a string starting with a specific character

I have a column with text/sentences that may include strings starting with ‘@’. I need to remove all strings starting with ‘@’ from the texts. For example:

enter image description here

Is there any function that can do the trick? I have tried the following but this removes only the ‘@’ from the string:

SELECT  Column1, 
        LTRIM(SUBSTRING(Column1, CHARINDEX('@',Column1)+1, LEN(Column1))) AS [Output column]
FROM mytable
WHERE Column1 like '%@%';

Advertisement

Answer

One way to do it is with a recursive CTE:

with cte as (
  select Column1 col, Column1 + ' ' Column1, 1 level from mytable
  union all
  select col,
         left(Column1, charindex('@', Column1) - 1) +
         right(Column1, len(Column1) - charindex(' ', Column1, charindex('@', Column1)) + 1),
         level + 1
  from cte
  where charindex('@', Column1) > 0
)
select distinct rtrim(first_value(Column1) over (partition by col order by level desc)) Column1
from cte

See the demo.
Results:

> | Column1                               |
> | :------------------------------------ |
> | another text text continues here word |
> | some text here text continue here     |
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement