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

如何在SQL Server中替换特定字符前后的子字符串?,sql,sql-server,database,Sql,Sql Server,Database,我有一个SQL变量: SET @TSQL = 'this is test string [this text may vary] other text' 现在我想用我自己的不同文本替换子字符串“[此文本可能不同]”。 有人能帮我吗?请记住,我要替换的子字符串不是静态的,它是动态的,可能会发生变化 这看起来和我的问题很相似,但它只针对特定角色。我需要前后两个字符 .将子字符串放在“[”之前添加替换项,并将子字符串放在“]”的右侧 declare @TSQL varchar(100) declar

我有一个SQL变量:

SET @TSQL = 'this is test string [this text may vary] other text'
现在我想用我自己的不同文本替换子字符串“[此文本可能不同]”。 有人能帮我吗?请记住,我要替换的子字符串不是静态的,它是动态的,可能会发生变化

这看起来和我的问题很相似,但它只针对特定角色。我需要前后两个字符


.

将子字符串放在“[”之前添加替换项,并将子字符串放在“]”的右侧

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)

就这么简单吗

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”是否必要……但这只是我在字符串长度计算中看到的一种常见调整。)


回复和编辑注释:
--我的答案写得好像
“这是测试字符串”
,等等都是要识别的字符串
--Patindex(替换Charindex)意味着您只能识别前缀字符串,而后缀字符串也存在
--根据您后来的评论,我在前面的字符串中添加了
[
,在后面的字符串中添加了
]
,这听起来像括号实际上是要识别的字符串的一部分

--
[
本身被封装在
[
]
中,以“转义”它——因此它将被逐字解释。

东西很好地做到了这一点

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); 

这里的依赖项是什么?是什么使该子字符串与字符串的其余部分区分开来。括号是文字吗?在您的情况下是否会有括号?是的,括号使子字符串区分开来谢谢。这正是我想要的:)