【发布时间】:2011-02-04 06:11:02
【问题描述】:
在 SQL Server 2008 中,我从下面的代码项目站点构建了一个正则表达式匹配和替换函数,并且运行良好。 http://www.codeproject.com/KB/string/SqlRegEx.aspx?msg=3683405#xx3683405xx。 这个函数基本上是查找列文本,找到匹配并替换为替换的文本。我在这里使用了反向引用。
例如如果 Column1 有“第一篇文章#345 被 9999 引用并放置在 001 中”,它将返回 345#9999#001
选择语句 选择 column1, dbo.ufn_RegExReplace(Column1, '(?\d+).?(?\d+).?(?\d+).*?(?\d+)', '${First_number_match }#${Second_number_match}#Third_number_match',1) 工作正常。
我想要的是将 345#9999#001 插入到表的三列中。
请注意,在我的实际问题中,我将不得不使用正则表达式。我简化了让专家专注于这个问题。
我们知道正则表达式很伤脑筋,与 SQL 一起使用会增加它的负担。因此,我将不胜感激这方面的任何帮助。 感谢您抽出宝贵时间阅读本文。
【问题讨论】:
-
我不确定我是否理解你的问题。是否要将
345#9999#001拆分为三个部分并将每个部分插入不同的列?或者你想要三列中每一列的完整字符串? -
根据我对您链接中描述的功能的理解,您应该使用功能 ufn_RegExSplit 而不是 ufn_RegExReplace
-
Patrick Echterbruch:是的,你的假设是正确的。谢谢
标签: regex tsql insert backreference