0

文字列内の 2 つのカンマの間にのみ出現する単語を検索するという要件に取り組んでいます。

たとえば、私のデータベースには次のデータがあります。

------------------------------------------------------------------------
| ID  | TITLES
------------------------------------------------------------------------
|  1  | THE QUICK BROWN FOX , JUMPS OVER , THE LAZY DOG
------------------------------------------------------------------------
|  2  | THE, QUICK FOX JUMPS NIGHTLY , ABOVE WIZARD
------------------------------------------------------------------------

したがって、人々がQUICK FOXを検索すると、両方の行が表示されるはずです。

ただし、 QUICK FOX JUMPSを検索すると 、行 2のみが返されます。これらの単語はコンマの同じセクションにしか表示されないためです。最初の行を返すべきではありません。QUICK、FOX、JUMPS という単語はすべて最初の行にありますが、同じセクションには属していません (コンマで区切られています)。

これに対して SQL クエリを作成することは可能ですか? 現在、私は各コ​​ンマを分割し、C# コード内で個別に検索を行っています (ただし、あまりエレガントではありません)。

これが理にかなっていることを願っています。どんな助けでも大歓迎です。

4

4 に答える 4

2

これを C# で実行したい場合 (これはオプションのように思えます)、非常にエレガントに実行できると思います。は行myRowsを表すIEnumerable<Row>型で、すべての検索語を含むであるとします。RowmySearchTermsIEnumerable<string>

myRows.Where(row => row.Title.Split(",")
                    .Any(part => mySearchTerms
                         .All(searchTerm => part.Contains(searchTerm)));

つまり、2 つのコンマの間の文字列にすべての検索語が含まれる行を探しています。

于 2013-05-17T03:35:32.607 に答える
0

これにより、 「Quick Fox Jumps」の目的の結果が返されます。

select ID, Titles
from Test
where Titles like '%Quick Fox Jumps%'

"Quick Fox"の結果が必要な場合は、次を試してください。

select ID, Titles
from Test
where Titles like '%Quick Fox%'

%任意の文字を表します (配置ごとに前/後)。

_配置ごとに前後の 1 文字のみを表します。

だから_あなたの数だけ多くのキャラクターが取られます。

詳細については、こちらをお読みください

編集

お望みならば..

QuickJumpを返す行。それらが一緒でなくても、次のように検索します。

%Quick%Jump%

于 2013-05-17T06:51:27.997 に答える
0

検索語を結合したままにしておくことに関心がない場合は、 を使用LIKEして完全な検索語を取得できます。

select ID, Titles
from theTable
where Titles like '%Quick Fox Jumps%'
于 2013-05-17T03:33:12.347 に答える
0

処理速度が重要な場合、適切な解決策は全文検索を使用することです。
標準の SQL Server または外部インデクサー (Lucene など) のいずれかです。

外部インデクサーを使用する場合、フィードする内容を制御できるため、2 つのコンマの間にないものを取り除くことができます。

処理速度が重要でない場合は、C# が最適なソリューションと思われます。

于 2013-05-17T03:39:35.433 に答える