2011-11-15 12 views
1

単語数に基づいて検索を作成する方法はありますか?例えばT-SQLストアドプロシージャを使用した動的検索の作成

私はcarを検索しwheelそれは@のWORD1がcarで、@のWORD2がwheelある

select * from table 
where 
    (word is like @word1) 
    and (word is like @word2) 

のようなT-SQL検索を作成することになります。

これは任意の数の単語である可能性があります。したがって、これは動的である必要があります。

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

答えて

1

これを試してください。@ wordtableは、必要なすべての単語を動的に含むことができます。すべての単語が存在する@tableからの行だけを見つけます:

declare @wordtable table(word varchar(20)) 
declare @table table(word varchar(500)) 

insert @wordtable values('car') 
insert @wordtable values('wheel') 

insert @table values('carwheel') 
insert @table values('car') 
insert @table values('wheel') 
insert @table values('wheelcat') 

select * from @table t 
where not exists (select 1 from @wordtable where t.word not like '%' + word + '%') 

"Contains"はまだまだ改善の余地があります。しかし、これは問題を解決するうまい方法です。

0

これは非常に遅くスケーラビリティがありません。 Luceneのようなものを使用することを検討してください。

1

実際に検索したい単語であると仮定すると、SQL Serverにはフルテキスト検索機能が組み込まれています(http://msdn.microsoft.com/en-us/library/ms142571.aspx)。少なくとも8年間それは完璧ではありません - そしてあなたはLuceneがより良くなるケースを作ることができます - しかし、あなたのニーズが単純なら、確かに仕事をします。

「ファジー」マッチングなど、テキスト検索のための機能をそのまま使用することもできます。

あなたが書くためにできるだけ多くのコードを持っていないとして、あなたはあなたの擬似コードのバグを回避します -

(word is like @word1) 
    and (word is like @word2) 

WORD1とWORD2が同じである場合にのみ結果が得られます...

0

私はあなたがまだこのためのSQLを記述したいと思いますしかし、もし、あなたがそうあなたのSearchTerms、表およびF

 
declare @searchTerms varchar(100) 
select @searchTerms = 'WORD1,WORD2,GIRLS,BOYS' -- some list 

select Field1, Field2 , Field3 , Field4 
from SomeTable 
where CHARINDEX(',' + Field1 + ',', ',' + @searchTerms + ',' , 0) > 0 

CHARINDEX機能を試すことができ、上記と言われているものを考慮に入れてしまうでしょうあなたが望むなら、ieldを変数に置き換えることができます。次に、実行するSQL文を作成します。

関連する問題