【クエリ】ワイルドカードの使い方 全7種類パターンを解説!

クエリ

クエリやSQLを使って、データを自由自在に抽出できるようになると、Accessの活用範囲は一気に広がります。データを絞り込む方法は数多くありますが、なかでも「ワイルドカード」は、あいまいな条件で検索したいときに非常に便利な機能です。

この記事では、いわゆる「あいまい検索」で使われるワイルドカードについて、全7種類を取り上げ、それぞれの使い方と具体的な使用例をわかりやすく解説していきます。

あいまい検索(パターンマッチング)とは

完全一致による抽出

クエリでデータを絞り込む際は「抽出条件」を指定します。例えば、都道府県フィールドから 東京都 を絞り込む場合、クエリのデザイングリッドに以下のように指定します。

このようなデータ抽出方法を「完全一致」といいます。文字通り、条件に対して完全に一致するレコードのみ抽出する方法ですね。

Like演算子とワイルドカードによるあいまい検索

これに対して「※※が含まれるレコード」のように、あいまいな抽出条件を指定することも可能です。このような検索方法を「あいまい検索(またはパターンマッチング)」 といい、「Like演算子」と「ワイルドカード」を組み合わせることで実現します。

以下は、Like演算子を使い、都道府県フィールドから、先頭に が含まれる県等を抽出した例です。

抽出条件に Like "山*" を指定することで 山形県 山梨県 山口県 が抽出されます。ここで使用した *(アスタリスク)のような文字をワイルドカードといいます。

Accessにおけるワイルドカードには、次の7種類がありますので、詳しく解説します。

ワイルドカードの種類

標準的な設定におけるワイルドカード

ワイルドカードに使用する文字と使用例は下表のとおりです。

文字説明使用例抽出結果
任意の文字列LIKE "田中*"田中一郎など
任意の1文字LIKE "田中?"田中瞳など
任意の1桁の数字LIKE "#組"1組,2組など
[AB]AまたはBのどちらか1文字LIKE "g[eo]t"get,gotなど
[!AB]AまたはB以外の1文字LIKE "p[!eo]t"pat,putなど
[A-C]A〜Cの範囲内の1文字LIKE "b[a-c]t"bat,bbtなど
[!A-C]A〜Cの範囲内の文字以外の1文字LIKE "b[!a-c]t"bet,bitなど

ANSI-92におけるワイルドカード

前表でご紹介したワイルドカードは、Accessで一般的に使われる文字としてご理解いただいて問題ありません。
ただし、AccessのSQLモードによって、使用できるワイルドカード文字が異なる点には注意が必要です。

SQLモードとは?

SQLモードとは、Accessのオプション設定「SQL Server 互換構文(ANSI 92)」で切り替えることができる設定です。

Accessの初期状態では、SQLモードは「ANSI-89」が使用されており、これはAccess独自の構文に基づいています。一方、Microsoft SQL Serverなどと互換性のある構文にしたい場合は、ANSI-92モードに変更することができます。

SQLモードの変更手順については、以下の記事で詳しく解説しています。

ANSI-92に切り替えた場合、使用できるワールドカード文字は以下のとおりとなります。

ANSI-89(通常)ANSI-92説明
任意の数の文字
_任意の1文字
[!文字リスト][^文字リスト]文字リスト以外の1文字

通常は気にしなくてもよいが、ADO使用時は注意

通常のクエリ作成やテーブル操作においては、自分でSQLモードを切り替えない限り、ANSI-89が使われます。そのため、特に意識しなくても特段問題ないです。

ただし、ADO(ActiveX Data Objects)を使用する場合には注意が必要です

ADOを通じてデータベースにアクセスする場合、Accessの設定に関係なくANSI-92構文が適用されるため、ワイルドカード文字も %_ を使用する必要があります。

Like演算子&ワイルドカードの活用パターン

これまでの説明は、クエリのデザインビューで使用するケースを想定したものですが、SQLや関数でも同じよう、Like演算子&ワイルドカードによる「あいまい検索」を使用することができます。ここでは、具体例としてそれぞれのパターンをご紹介します。

SQL

SELECT * FROM 顧客 WHERE 氏名 LIKE “**”;

処理結果:氏名に「田」が含まれるレコードをすべて抽出。

関数

Dlookup関数

DLookup(“氏名”, “顧客”, “氏名 LIKE ‘*一郎’“)

処理結果:氏名が「一郎」で終わるレコードから氏名を1件取得。

Dcount関数

DCount(“社員ID”, “社員”, “部署名 LIKE ‘営業*’“)

処理結果:部署名が「営業」で始まる社員数をカウント。

IF文とDcount関数の組み合わせ

If DCount(“ID”, “注文”, “注文日 LIKE ‘2024*’“) > 0 Then
MsgBox “2024年の注文があります。”
End If

処理結果:2024年に該当する注文があるかを判定。

まとめ

あいまい検索を行うための、Like演算子とワイルドカードの種類について解説しました。

ワイルドカードを自在に扱うことができれば、クエリやSQL、各種関数の使用におかる幅が広がりますので、ぜひマスターしておきましょう。

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