如何替换sql列中的常用单词

时间:2010-10-21 22:35:35

标签: sql sql-server-2008 replace

我有一个用于句子的常用词汇表(即A,the,and,where等等)

我想要做的是遍历所有这些单词并将其从人们输入的描述中删除,以尝试生成常用关键字或标签。但我不能使用替换因为替换将删除常用单词的任何实例,无论它是否只是几个字母构成一个更大的单词。例如:

我想在说明中替换A.现在显然有很多单词包含字母a。因此,所有这些A都将被剥夺。我不希望这样。当A用完整个单词时,我只想要它。我可以使用正则表达式来解决这个问题,但是想知道在SQL中是否有这样做而不必诉诸CLR proc。

也许我错过了一些东西,但我似乎找不到一个简单的方法来做到这一点,而不必写一些特定的场景,如:word plus space before,word plus space after,word plus period after ...我不认为这是最好的方式。

3 个答案:

答案 0 :(得分:0)

对于快速和肮脏,我曾经匆匆通过各种SQL函数PATINDEX,LEFT,RIGHT和LIKE来做这种事情。对于一次性数据准备,我导出到像Excel和眼球这样的东西。

一个好方法也是创建一个带有两列SOURCESTRING和TARGETSTRING的新StringSubstitutionTable,并运行一个替换函数,用连接表上的TARGETSTRING替换SOURCESTRING。这很酷,因为您可以根据需要添加替换条目。

答案 1 :(得分:0)

您可以尝试为要替换的每个单词嵌套替换。例如:

UPDATE TableName
SET ColumnName = REPLACE(REPLACE(REPLACE(REPLACE(TableName.ColumnName,' a ',' '),' the ',' '),' and ',' '), '  ', ' ')

如果您正在寻找,请告诉我。

答案 2 :(得分:0)

这是他们采取类似于你想做的事情的方式。

在更换行动期间......
在常用词之前和之后添加空格。
在描述之前和之后附加一个空格。

假设您要从描述中删除CommonWord“A”。

描述:“一句好词从不以A开头或以A结尾” CommonWord:“A”

更新TableName
设置描述=
LTRIM(RTRIM(替换(''+描述+'',''+ CommonWord +'','')))

这可以删除所有等于'A'的单词。因为您要用空格替换“A”,您需要LTRIM RTRIM删除任何前导或尾随空格。

您也可以分两步完成:

-
- 步骤1循环浏览除去它们的所有常用词语 -
更新TableName
设置说明=替换(''+说明+'',''+ CommonWord +'','')

-
- 步骤2无条件修剪所有描述
-
更新TableName
设置描述= LTRIM(RTIM(描述))