用值替换模式

问题描述 投票:0回答:1

如果不知道后面的数字将如何替换此字符串示例中的$ SV ###值?甚至只是将1234544放入另一个字符串变量中。

我尝试过,但是它不能代替任何东西:

      declare @string varchar(100) = 'F4 Obstructed reach beyond.  [$SV1234544" provided.]'
      SELECT REPLACE(@string,PATINDEX('%$SV[0-9+]%',@string),'test')

谢谢!

sql sql-server replace sql-server-2014 patindex
1个回答
0
投票

下面的代码可以预期数字始终以“ $ SV”为前缀。它经过一系列迭代以找到“ $ SV”之后的数字值,然后将“ $ SV”和数字替换为您要替换的任何文本。此代码使用子字符串,patindex,concat和replace函数。

DECLARE @string varchar(100) = 'F4 Obstructed reach beyond.  [$SV1234544" provided.]'
DECLARE @SubString Varchar(100) = SUBSTRING(@string, PATINDEX('%$SV[0-9]%', @string), LEN(@string))
SELECT REPLACE(@string,CONCAT('$SV',LEFT(SUBSTRING(@SubString, PATINDEX('%[0-9.-]%', @SubString), 8000),PATINDEX('%[^0-9.-]%', SUBSTRING(@SubString, PATINDEX('%[0-9.-]%', @SubString), 8000) + 'X') -1)),'test') 
© www.soinside.com 2019 - 2024. All rights reserved.