如何替换单词列表?

时间:2018-03-15 16:13:39

标签: sql sql-server tsql

我在SQL-Server 2012上(可能是2016年)。我的问题:

我在表格中有一个单词列表

create table #wordlist (searchword varchar(255) not null)

insert #wordlist (searchword) values ('Private_1'), ('Private_2'), ('Private_3')

和一个带有文本列的表,其中包含此单词和文本中的其他信息:

create table #texts (mytext varchar(2000) not null)

insert #texts (mytext) values ('This text was written by Private_1.'), ('Private_3: My memo'), ('My name is Private_2. I feel free! (Private_1, Private_2)')

我想替换'搜索词'来自&text;' mytext'使用' xxx'

期望的结果是

'This text was written by xxx'
'xxx: My memo'
'My name is xxx. I feel free! (xxx, xxx)'

我正在寻找一种可以处理massdata的解决方案。 #wordlist上的光标逐个替换数据,如

replace (mytext, @searchword, 'xxx')

是没有选择。我的#wordlist包含大约100000个单词,我的#texts包含大约3000万行。全表扫描大约需要15分钟(读取大约1 TB)。

光标需要7年......也许一个索引会加速1000倍,这会使它运行2天。

有没有办法用' xxx'?

替换单词列表

Does REPLACE function in SQL Server accept input from a table for 'string_pattern' parameter?中显示的简单方法无效 - 请参阅上面的计算。)

1 个答案:

答案 0 :(得分:1)

评论太长了。

这将是漫长而繁琐的。 SQL不是最好的工具选择。 可以将其表达为一次处理一个单词的递归CTE。但是,外表中有30亿行,需要处理100,000个单词。 。 。好吧,大致永远。

希望您可以冻结您正在使用的桌子几天。我建议用Python之类的代码编写代码:

  • 将单词列表读入数组
  • 阅读一堆记录,一次说100,000条。
  • 遍历每条记录的单词并进行替换。
  • 重复并重复。

您可以通过运行脚本的多个副本并在不同的记录上运行它来并行化此操作。

这是一项很大的努力。如果有人希望你在一两天内完成,那么期望就会消失。