如何在SQL Server中的特定字符之前和之后替换子字符串?

时间:2014-09-04 16:42:15

标签: sql sql-server database

我有一个SQL变量:

SET @TSQL = 'this is test string [this text may vary] other text'

现在我要替换子字符串" [此文本可能会有所不同]"用我自己的不同文字。 有谁能够帮我?请记住,我要替换的子字符串不是静态的,它是动态的,可能会有所不同。

这看起来与我的问题类似,但它仅适用于特定字符之前。我需要在两个角色之前和之后。

How do I replace a substring of a string before a specific character?

3 个答案:

答案 0 :(得分:1)

在['之前]使用子串。添加你的替换和']'

的子串
declare @TSQL varchar(100)
declare @R varchar(100)
SET @TSQL = 'this is test string [this text may vary] other text'
SET @R = 'MySubstitute'
Select Left(@TSQL,Charindex('[',@TSQL)-1) + @R + RIGHT(@TSQL,Charindex(']',REVERSE(@TSQL))-1)

答案 1 :(得分:1)

这就像这个一样简单吗?

SET @TSQL = 'this is test string ' + @NewText + ' other text'

或者,如果预期的前一文本不是前面的唯一文本,可能是:

SET @TSQL = 'this is test string [this text may vary] other text'
DECLARE INT @TSQL_PrefixEnding = PATINDEX('%this is test string [[]%[]] other text%', @TSQL) + LEN('this is test string [') - 1
DECLARE INT @TSQL_SuffixStart = CHARINDEX('] other text', @TSQL, @TSQL_PrefixEnding)
SET @TSQL = LEFT(@TSQL, @TSQL_PrefixEnding ) + @NewText + SUBSTRING(@TSQL, @TSQL_SuffixStart, LEN(@TSQL) - @TSQL_SuffixStart + 1)

(注意:我必须测试它,看看是否需要“+1”......但这只是我在字符串长度计算中看到的一种常见的调整。)< / p>


笔记重新回答&amp;编辑:
- 我的回答写得好像'this is test string '等是识别的字符串。
- Patindex(替换Charindex)意味着当后缀字符串也存在时,您只能识别前缀字符串。
- 我之前将[添加到字符串中,然后]添加到字符串之后(根据您之后发生的任何地方),这听起来好像括号实际上是字符串的一部分认识。
- [本身已包含在[]中,以“逃避”它 - 因此它将按字面解释。

答案 2 :(得分:1)

STUFF做得很好。

declare @string         [nvarchar](max) = N'This is a boilerplate string where [this text may vary] but this text should stay'
    , @replace_me   [nvarchar](max) = N'[this text may vary]'
    , @replace_with [nvarchar](max) = N'cool new stuff!';
select stuff (@string
          , charindex(@replace_me
                     , @string)
          , len(@replace_me)
          , @replace_with);