1

在一般情况下,我有一个使用全文索引执行搜索的存储过程。但是我不能为一个字段建立全文索引,我需要使用LIKE构造。

所以,问题是:参数可能是

“a*”或“b*”

CONTAINS命令的参数。

Сan任何人都给出了一个很好的解决方案,如何转换这个参数进行LIKE构造。

谢谢你。

PS:我用MSSQL Server

4

3 回答 3

2

根据您想要支持的全文搜索结构,这通常是不可能的。

根据MSDN,SQL Server 上的全文搜索语法支持以下结构:

一个或多个特定单词或短语(简单术语)

LIKE '%[,;.-()!? ]学期[,;。-()!?]%'

词以指定文本开头的词或短语(前缀词)

LIKE '%[,;.-()!? ]学期%'

特定词的屈折形式(世代词)

不可能

与另一个词或词组相近的词或词组(邻近词)

不可能

特定词的同义词形式(同义词库)

不可能

使用加权值的单词或短语(加权项)

不可能

我标记为“不可能”的那些不能真正翻译成 LIKE 查询,但当然你可以发挥创造力(使用你自己的词干算法来处理屈折形式,或者你自己的同义词词典)来支持至少其中一些.

于 2012-08-29T14:43:48.633 回答
0

最后,您可能需要使用动态 SQL。

给定输入,这是一种获得正确 WHERE 子句的方法:

declare @str varchar(255) = '"a*" or "b*"';

with const as (select 'col' as col)
select col+' like '+replace(replace(REPLACE(@str, '"', ''''), '*', '%'), 'or ', 'or '+COL+' like ') as WhereClause
from const

“const”只是一个包含一列的表,用于指定您的列名。它允许在一个地方指定它。

这只是替换以获得 LIKE 的正确语法。当然,要支持来自 CONTAINS 的更多功能,这将更加复杂。

于 2012-08-29T14:46:26.103 回答
0

谢谢大家!

不幸的是,表达式解析对于一般情况来说是不够的。

我在 MS SQL SERVER 中使用正则表达式

http://anastasiosyal.com/POST/2008/07/05/REGULAR-EXPRESSIONS-IN-MS-SQL-SERVER-USING-CLR.ASPX

于 2012-08-30T06:42:58.323 回答