是否有SQL Server函数来删除括号及其内容?

tsd*_*ter 5 t-sql sql-server replace function sql-server-2008

我需要从多个记录中删除所有括号及其内容,但我无法找出执行此操作的最佳方法.

我希望能够写出类似的东西

SELECT dbo.RemoveBracketedText(ColumnName) FROM TableName;
Run Code Online (Sandbox Code Playgroud)

并且它会将诸如'Hello(World)'之类的记录转换为'Hello'

任何帮助表示赞赏.

谢谢!

RTh*_*mas 7

我的第一种方法可能是编写一个快速的c#应用程序来执行它或使用SSIS并编写一个包来处理它,但如果你决定使用tsql ...它可能需要一个递归函数和一些字符串操作.

这是经过最低限度测试但应该接近.(即它适用于您在问题中提供的示例文本).

CREATE FUNCTION RemoveBracketedText (@sourceString varchar(max))
RETURNS varchar(max)
AS
BEGIN

DECLARE @pStart Int
DECLARE @pEnd Int
DECLARE @pTarget varchar(max)
DECLARE @pResult varchar(max)

SET @pStart = CHARINDEX('(', @sourceString)
SET @pEnd = CHARINDEX(')', @sourceString, @pStart) /** start looking from pos of opening bracket */

IF @pEnd > @pStart AND @pEnd > 0  /** basic error avoidance */
BEGIN
  SET @pTarget = SUBSTRING(@sourceString, @pStart, @pEnd - @pStart + 1)
  SET @pResult = Replace(@sourceString, @pTarget, '')

  /** recursion to get rid of more than one set of brackets per string */
  IF CHARINDEX('(', @pResult) > 0 AND CHARINDEX(')', @pResult) > CHARINDEX('(', @pResult)
  BEGIN
    SET @pResult = dbo.RemoveBracketedText(@pResult)  
  END
END
ELSE
BEGIN
  SET @pResult = @sourceString  /** no matching set of brackets found */
END

RETURN @pResult
END
Run Code Online (Sandbox Code Playgroud)