Удалить символы между () SQL

Мне нужно удалить определенный текст из строкового значения в SQL.

Я пробовал разные комбинации CHARINDEX и LEN, но все время ошибался!

У меня есть поле имени, которое содержит имена. В некоторые поля добавлен текст в формате ().

Пример :

Smith (formerly Jones)

Мне нужно удалить весь раздел внутри скобок. как и сами кронштейны. К сожалению, иногда значение может быть

Smith (formerly Jones) Reeves

Так что я не могу просто удалить все, начиная с (!


person GPH    schedule 11.11.2016    source источник


Ответы (1)


Вот два примера, как это сделать. Вы можете сделать это без объявления переменных @StartIndex и @EndIndex, но я использовал их для ясности.

DECLARE @StartIndex int, @EndIndex int;
DECLARE @Str varchar(100);
SET @Str = 'This is a (sentence to use for a) test';

SELECT @StartIndex = CHARINDEX('(', @Str, 0), @EndIndex = CHARINDEX(')', @Str, 0);

SELECT SUBSTRING(@Str, 0, @StartIndex) + SUBSTRING(@Str, @EndIndex + 1, LEN(@Str) - @EndIndex) AS [Method1],
    LEFT(@Str, @StartIndex - 1) + RIGHT(@Str, LEN(@Str) - @EndIndex) AS [Method2];

Обратите внимание, что этот код не удаляет пробелы до или после скобок, поэтому вы получаете два пробела между «a» и «test» (поскольку это не было частью вашего вопроса).

Перед фактическим использованием подобного кода следует включить дополнительную проверку ошибок, например, если @Str не содержит круглых скобок, это вызовет ошибку.

person izzy    schedule 11.11.2016