【问题标题】:Replace certain pattern in a long string in MS SQL using T-SQL使用 T-SQL 在 MS SQL 中替换长字符串中的某些模式
【发布时间】:2009-07-18 15:10:48
【问题描述】:
我的 MS SQL 数据库中有一个表,其中的字段中有一些不完整的数据。这个有问题的字段是一个 varchar 字段,该字段中有大约 1000 个字符。该字符串由正斜杠格式的单词分段组成,后跟分段,然后以正斜杠(即 /p/)结束。这些段中的每一个都将由一个空格分隔。问题是这些分段中的某些没有最后一个正斜杠(即/p)。我需要编写一个 T-SQL 脚本来纠正这个问题。
我知道我需要使用更新语句来执行此操作。我也得到了 where 子句。但我遇到的问题是我将它设置为等于什么。由于该字符串大约有 1000 个字符,因此我不想键入实际字符串而只是更正有问题的分段。我的问题是,是否有一个“RegEx 替换函数”只会改变有问题的分段而让字符串的其余部分不理会?
我们将不胜感激。
提前致谢,
蒙特
【问题讨论】:
标签:
sql-server
regex
tsql
【解决方案1】:
SQL 不支持其中的 RegEx。您可以编写一个 SQL CLR 函数,然后通过它传递数据,如果数据有问题,请更正它,然后将更正后的版本返回给 SQL。
UPDATE YourTable
Set YourColumn = dbo.YourClrProc(YourColumn)
【解决方案2】:
如果您安装了 Windows Scripting Host(大多数机器都安装了),那么您可以使用 this method 从 T-SQL 调用 VBScript.RegExp 对象。
【解决方案3】:
有REPLACE,但与RegEx没有什么关系。
如果这是一次性操作,那么您可以考虑导出表,使用您熟悉的工具(如 sed 或 grep),然后将修改后的数据导入回来。它可能比尝试在 T-SQL 中执行此操作更快、更正确。
另一方面,如果是计划维护操作,您需要经常重复以维护数据,那么我同意 mrdenny,CLR 函数可能是最佳选择。