1

一般的にフルテキスト インデックスを使用して検索を実行するストアド プロシージャがあります。しかし、1 つのフィールドに対してフルテキスト インデックスを作成することはできず、LIKE 構造を使用する必要があります。

したがって、問題は次のとおりです。パラメーターは

「a*」または「b*」

CONTAINSコマンドのようなパラメーター。

このパラメータを変換してLIKE構築する方法について、誰でも良い解決策を提供できますか。

ありがとうございました。

PS: 使ってますMSSQL Server

4

3 に答える 3

2

サポートしたい全文検索構造にもよりますが、これは一般的に不可能です。

MSDNによると、SQL Server の全文検索構文は次の構造をサポートしています。

1 つまたは複数の特定の単語または語句 (単純な用語)

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」は、列名を指定するための1つの列を持つ単なるテーブルです。一箇所で指定できます。

これは、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 に答える