如何在SQL Server中替换特定字符前后的子字符串?
我有一个SQL变量:如何在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
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);
这里的依赖项是什么?是什么使该子字符串与字符串的其余部分区分开来。括号是文字吗?在您的情况下是否会有括号?是的,括号使子字符串区分开来谢谢。这正是我想要的:)