删除()SQL之间的字符

时间:2016-11-11 14:32:11

标签: sql-server-2008 charindex

我需要从SQL中的字符串值中删除特定文本。

我尝试了各种CHARINDEXLEN组合,但一直搞错了!

我有一个名称字段,其中包含名称。某些字段中添加了()中的文字。

示例:

Smith (formerly Jones)

我需要移除括号内的整个部分。以及括号本身。不幸的是,有时价值可能是

Smith (formerly Jones) Reeves

所以我不能从(开始删除所有内容!

1 个答案:

答案 0 :(得分: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不包含括号,则会导致错误。