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'
任何帮助表示赞赏.
谢谢!
我的第一种方法可能是编写一个快速的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)