1

TableAに次のデータがあります...

ID | Text
---------------------------------------------
1  | let's find this document
2  | docments are closed

...そして、次の選択を行うと...

select Text from TableA where Text like '%doc%';

...奇妙な結果が得られたようです。両方の行が返されます。この選択では、行 1 だけを返すべきではありませんか? と思っただろうな..

select Text from TableA where Text like 'doc%';

...行 2 だけが返されます。何か不足していますか?

私がやろうとしているのは、検索ツールの一部として、このデータに対して 3 つの個別の検索を実行することです。最初の一致は、文字列の先頭で指定されたパターン「doc」を検索することです。2 番目に、次の一致では文字列の末尾にある同じパターンを検索し、3 番目に、パターンがテキスト内のどこかに現れるかどうかを識別します。 - テキストを囲むことができます。理想的には、最初の検索は行 2 のみに一致し、2 番目の検索は結果を返さず、3 番目の結果は行 1 のみを返します。

このようにする理由は、パターンがどのように文字列に一致するかを感じてみたかったからです。特定の行のパターンが (a) 先頭、(b) 末尾、(c) 中間のいずれかに一致したことを確認すると、結果が読みやすくなります。

正規表現の使用を考えていましたが、私のデータはユニコードです。

4

2 に答える 2

3

いいえ、最初のクエリは両方の行を返します。これは、 0以上の文字%を意味するためです。したがって、フィールドに最初に出現するものであれば、パターンにも一致します。doc%doc%

しかし、2 番目のクエリは正しく、行 2 のみが返されます。

于 2013-01-16T13:58:42.857 に答える