「部分一致」と「中間一致」の違い

(文字列検索) 検索条件の 違い - 前方一致 / 完全一致 / 後方一致 / 部分一致 / 中間一致 開発/PG

アプリケーション開発における文字列の一致条件としてよく使われるものに、「完全一致」「部分一致」「前方一致」「後方一致」があります。

その他に「中間一致」という一致条件がありますが、滅多に使われることはなく、使われている場合でも誤用していることが多いです。

その誤用は 大手企業のドキュメントでも 中小企業のドキュメントでも、しばしば見かけます。

当エントリーは、まず 文字列の代表的な一致条件を 軽く説明してから「部分一致」と「中間一致」の違いを説明します。

完全一致

「完全一致」とは文字通り、文字列が検索キーワードと完全に一致することです。

SQLで完全一致検索を行うにはイコールを使い、次のように書きます。

WHERE textdata = 'abc'

前方一致 / 後方一致

「前方一致」とは文字列が検索キーワードから始まることで、
「後方一致」とは文字列が検索キーワードで終わることです。

SQLで前方一致検索を行うには LIKE句 を使い、次のように書きます。

WHERE textdata LIKE 'abc%'

SQLで後方一致検索を行うには LIKE句 を使い、次のように書きます。

WHERE textdata LIKE '%xyz'

部分一致

「部分一致」とは、文字列の一部が検索キーワードと一致することを示します。

検索対象の文字列が「ABCDE」の場合、「ABC」「BCD」「CDE」などが部分一致する検索キーワードです。

SQLで部分一致検索を行うには LIKE句 を使い、次のように書きます。

WHERE textdata LIKE '%keyword%'

この「部分一致」のことを「中間一致」だと言う人が結構多いですのですが、「部分一致」と「中間一致」は違う意味の言葉です。

某大学のサイト内ですら間違った説明がされていますので、そちらは信じないようにご注意ください。

中間一致

「中間一致」とは、部分一致のうち、前方一致でも後方一致でもない一致です。

つまり、検索対象の文字列が「ABCD」の場合、「B」「BC」「C」のみが「中間一致」する検索キーワードだということです。
式で書くと『中間一致 = (部分一致 AND (NOT 前方一致) AND (NOT 後方一致))』になります。

逆に言えば、「前方一致」「後方一致」「中間一致」はどれも「部分一致の一部」ということですね。

SQLで中間一致検索を行うには LIKE句 を使い、次のように書きます。

WHERE textdata LIKE '_%abc%_'

中間一致で検索することは滅多に無いでしょう。
中間一致は「検索方法」というよりは「事象」に近いように思います。

パターン表

検索文字列が「ABCD」の場合の一致パターンを表示にしてみました。

検索キーワード一致箇所前方一致中間一致後方一致部分一致完全一致
AABCD×××
BABCD×××
CABCD×××
DABCD×××
ABABCD×××
BCABCD×××
CDABCD×××
ABCABCD×××
BCDABCD×××
ABCDABCD×

(まとめ) 部分一致と中間一致の違い

“どこでもいいから一致する”のが 部分一致 であり、
“端っこを除いたどこかが一致する”のが 中間一致 です。

部分一致 は 中間一致 を含みます。

ということで、部分一致 と 中間一致 の違いは、一致箇所の範囲です。

(余談) 完全一致に部分一致は含むのか

『部分一致 は 一部分だけ が一致することではないのか』、『完全一致 と 部分一致 は両立しないのではないか』という疑問を持たれるかたも多いでしょう。

その答えは、言葉を使う場面により異なります。

単に「部分一致」と言っても、「事象としての部分一致」と「検索条件としての部分一致」で意味合いが少し違います。

事象としての話であれば、全体の一部分が一致した場合に「部分一致した」と言い、完全に一致した場合は 部分一致したとは言わず、「完全一致した」と言います。
ですので、事象としては 完全一致 と 部分一致 が両立することはありません。

しかし、アプリケーションの設計書で検索条件として「部分一致」と書かれている場合ですと、部分一致は「完全一致」を含みます。
言い換えれば、部分一致でデータを検索した結果、完全一致するデータが見つかることもある、と言うことです。

ややこしいですね(笑)

おわりに

言葉が多少間違っていても、その意図を汲んで上手く処理してくれる人は沢山いますが、毎度そんな方ばかりとは限りませんので、言葉は なるべく 正しく使うようにしたいと思っています。

以上、最後までお読みいただき、ありがとうございました。
この情報がお役に立てれば幸いです。

タイトルとURLをコピーしました