Accessワイルドカードの使い方とLikeによるあいまい検索

概要

この記事の結論
Accessのワイルドカードは、Like演算子と組み合わせて任意の文字を表す記号です。通常のACCDBで使うANSI-89形式なら、Like “*ノート*” でノートを含む文字列を抽出できます。正規表現と同じ構文ではありません。

この記事でわかること

  • 前方・後方・部分一致を使い分ける
  • 1文字と文字集合を指定する
  • 記号そのものを検索する
  • ANSI-89とANSI-92を混ぜない

この記事の主な内容

  1.  Likeとワイルドカードで文字の一部を検索する
  2. 前方・後方・部分一致を使い分ける
  3. 1文字と文字集合を指定する
  4. 記号そのものを検索する
  5. ANSI-89とANSI-92を混ぜない
  6. Nullと検索結果の検証を忘れない
  7. よくある質問

想定読了時間:約9分


1 Likeとワイルドカードで文字の一部を検索する

Accessのワイルドカードは、Like演算子と組み合わせて任意の文字を表す記号です。
通常のACCDBで使うANSI-89形式なら、Like “*ノート*” でノートを含む文字列を抽出できます。
正規表現と同じ構文ではありません。

データベースがANSI-92に設定されている場合は%や_など別の記号を使います。
動かないときは式を書き換える前に設定を確認しましょう。

Like検索の構造について、演算子、検索語、記号の関係を示す図

2 前方・後方・部分一致を使い分ける

Like “ノート*” はノートで始まる文字列、Like “*ノート” はノートで終わる文字列、Like “*ノート*” は途中を含む検索です。*は0文字以上なので、どれもノートだけの文字列に一致します。

大量データで先頭に*を付ける検索は、前方一致より負荷が大きくなる場合があります。
コードの先頭が分かっているなら前方一致にするなど、必要以上に広い条件を避けます。

設定例と確認点

条件一致例
Like “ノート*”ノート/ノート大判
Like “*ノート”ノート/学習ノート
Like “*ノート*”ノート/学習ノート大判
3種類の一致について、前方、後方、部分の関係を示す図

3 1文字と文字集合を指定する

?は任意の1文字、#は任意の数字1文字です。
[ABC]はA・B・Cのいずれか、[A-Z]は範囲、[!A]はA以外の1文字を表します。
範囲の評価はデータベースの並べ替え規則などの影響も受けるため、実データで確認してください。

設定例と確認点

条件意味例
Like “A?”Aと1文字AB、A1
Like “A#”Aと数字1文字A1、A9
Like “[ABC]*”先頭が指定文字Apple、Book
Like “[!A]*”先頭がA以外Book
文字の集合と範囲について、[ABC]、[A-Z]、[!A]の関係を示す図

4 記号そのものを検索する

文字列に含まれる*や?を記号として探す場合、そのままではワイルドカードとして評価されます。
ANSI-89では[*]や[?]のように角括弧で囲む方法を使います。

商品名に*を含む行なら Like “*[*]*”、?を含む行なら Like “*[?]*” です。
利用者が入力した検索語に記号が含まれる場合も、文字どおりに探すか記号として使わせるかを決めます。

記号自体を検索について、[*]、[?]、方針の関係を示す図

5 ANSI-89とANSI-92を混ぜない

Accessの設定や接続方法によって、使用するワイルドカードの体系が異なります。
*が文字列、?が1文字を表す例はANSI-89の説明です。ANSI-92ではそれぞれ%と_が基本になります。

角括弧内の否定なども違いがあります。
ANSI-89の[!A]とANSI-92の[^A]を混在させないようにし、他のDB向けSQLを貼り付ける際は文法を確認します。

設定例と確認点

用途ANSI-89ANSI-92
任意の文字列*%
任意の1文字?_
数字1文字#[0-9]
集合の否定[!ABC][^ABC]
ANSIの記号の違いについて、ANSI-89、ANSI-92の関係を示す図

既存Accessへの影響を判断できない場合

本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。


6 Nullと検索結果の検証を忘れない

Not Like “*試作*” は試作を含まない文字列を選びますが、Nullの行は通常含みません。
未入力も含めるなら Not Like “*試作*” Or Is Null のように明示します。

完全一致・前方一致・部分一致で想定する例を3件ずつ用意し、記号入り、空文字、Nullも試します。
大文字小文字の区別が必須なら、Likeの通常の照合規則だけで保証できるかを確認し、別の比較方法も検討してください。

検索結果の検証について、一致、不一致、記号、Nullの関係を示す図

7 よくある質問

ANSI設定によります。通常のACCDBのANSI-89なら*、ANSI-92なら%です。

ANSI-89ならLike “*[*]*”のように書きます。

NullはNot Likeだけでは含まれません。必要ならOr Is Nullを追加します。

まとめ

完全一致・前方一致・部分一致で想定する例を3件ずつ用意し、記号入り、空文字、Nullも試します。
大文字小文字の区別が必須なら、Likeの通常の照合規則だけで保証できるかを確認し、別の比較方法も検討してください。

本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。


参考情報

Microsoft公式資料を参照しています。サンプルは説明用の架空データです。Windows版Accessの実機検証は未実施のため、適用前に対象環境のコピーで結果を確認してください。

Microsoft:ワイルドカード参照
https://support.microsoft.com/en-us/access/access-wildcard-character-reference

Microsoft:Like演算子
https://learn.microsoft.com/en-us/office/vba/access/concepts/structured-query-language/like-operator-microsoft-access-sql

TOP