【问题标题】:Replace pattern with value用值替换模式
【发布时间】:2020-05-19 11:48:09
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 您的意思是匹配 1 个或多个数字,例如 [0-9]+ 吗?
  • 是的 - 我尝试了两种方式 - 如果我把它放在 [0-9] 之外,那么它会替换它:“F4 Obstructedreach beyond. [$SV15279test3-”提供。]
  • 我希望它匹配 $SV1527903
  • 如果我这样做: SELECT PATINDEX('%$SV[0-9]%',@string) 它返回 31,但如果我把 + 放在那里 SELECT PATINDEX('%$SV [0-9]+%',@string) 它返回 0。
  • 我通过使用 SqlRegex.dll 找到了解决方法:igormicev.com/regex-in-sql-server-for-searching-texts

标签: sql sql-server replace sql-server-2014 patindex


【解决方案1】:

下面的代码将在期望数字始终以“$SV”为前缀的情况下工作。它通过一系列迭代来定位“$SV”之后的数值,然后将“$SV”和数字替换为您想要替换的任何文本。此代码使用 substring、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') 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2018-01-16
    • 2012-12-25
    • 1970-01-01
    • 2012-03-05
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多