文字列を検索・抽出するときに「『市』を含む文字列」とか「『山』で終わる文字列」といった条件を設けたいことがあります。
このような場合、Like演算子と、ワイルドカードという文字を使って検索することができます。ワイルドカードとは「どんな文字(文字列)にもあてはまる文字」です。これにより「『山』で終わる文字列」は「Like "*山"」という条件で検索できます。「*」は「0文字以上の文字列」を表すワイルドカードですので、「山」の字の前がどのような文字列でも(何もなく、単に「山」の1文字であっても)この条件で検索できます。
Like演算子とワイルドカードによる検索は「あいまい検索」などとも呼ばれます。以下ではこのような検索の使用例と、ワイルドカードとして使える文字、さらにさまざまな条件式の設定例を見てみます。
使用例
クエリでの簡単な使用例です。
このようなテーブルから、「山岳名が『山』で終わるもの」を抽出します。
クエリデザインの画面です。
山岳名列の抽出条件欄に「Like "*山"」と記入します。
クエリのデータシートビューです。
山岳名の長さにかからわず、最後の1文字が「山」であるものだけが抽出されています。
なお、単純にLike演算子としての戻り値の例を見てみますと、
"富士山" Like "*山"
はTrue(または-1)となりますし、これを用いた次の関数
IIf("富士山" Like "*山","〇","×")
の戻り値は「〇」となります。
ワイルドカードとして使える文字
ワイルドカードには、0文字以上の任意の文字列を表す「*」のほか、任意の1文字を表す「?」、任意の数字1文字を表す「#」があります。また、これらに付随して、文字の範囲を指定するため等に用いられる記号があります。整理しますと次のようになります。
ワイルドカード等 | 読み | 意味 |
---|---|---|
* | アスタリスク | 0文字以上の文字(そこに文字はあってもなくても良い) (文字は英数漢ひらカナ記号すべて可) |
? | クエスチョン | 1つの文字 (文字は英数漢ひらカナ記号すべて可) |
# | ナンバーサイン(シャープ) | 1つの数字 (0~9。全角可) |
[] | 角カッコ | 文字や数字のリストの列挙、または範囲を指定する また、「*」など、ワイルドカードとして使える文字をそのまま検索するときにも使います |
- | ハイフン | []とともに範囲を指定する |
! | エクスクラメーション | []とともに「~にあてはまらない文字」を表す |
また、演算子「Not」を用いて、例えば「Not Like "*山"」(「『山』で終わる」でない)といった検索を行うこともできます。「!」と似ていますが、常に同じ結果になるわけではありませんで注意してください。
さまざまな条件式の設定例
Like演算子とワイルドカードを用いる検索は、大きく「~で始まる」(前方一致)、「~で終わる」(後方一致)、「~を含む」(部分一致)に分けられますので、これに沿って実例を示します。
「~で始まる文字列」の例
条件式 | 意味 | あてはまる文字列の例 | あてはまらない文字列の例 |
---|---|---|---|
Like "東京*" | 「東京」で始まる | 東京 東京都 東京03 東京特許許可局 | 西東京市 首都大学東京 |
Like "東京?" | 「東京」で始まる3文字 | 東京都 東京1 | 東京 東京都民 |
Like "東京?*" | 「東京」で始まり3文字以上 | 東京都 東京都民 | 東京 |
Like "東京##" | 「東京」で始まり2文字の数字で終わる4文字 | 東京03 東京03 | 東京 東京〇三 |
Like "[あうお]*" | 「あ」「う」「お」(カナ、半角カナは区別されない)のいずれかで始まる | あ アイスクリーム うなぎ おにぎり3個 オレンジ | いそべもち 鰻 ODEN |
Like "[あ-お]*" | 「あ」から「お」(カナ、半角カナは区別されない)のいずれかで始まる | あ アイスクリーム いかげそ うなぎ えだまめ おにぎり3個 オレンジ | かつどん 鰻 ODEN |
Like "[ace]*" | 「a」「c」「e」(大文字小文字、全角半角は区別されない)のいずれかで始まる | a Aクラス abroad Color EDEN | big Doll |
Like "[a-e]*" | 「a」から「e」(大文字小文字は区別されない)のいずれかで始まる | a Aクラス abroad big Color EDEN | friend GIF |
Like "[山田中]*" | 「山」「田」「中」のいずれかで始まる | 山 田中 山中 中日ドラゴンズ | 太田 新山田 |
Like "[!あ-お]*" | 「あ」から「お」(カナ、半角カナは区別されない)以外の文字で始まる | かつお カレー 東京都 123 かつどん カレーライス | うなぎ オクラ おでん オレンジ |
Like "[!あ-お]??" | 「あ」から「お」(カナ、半角カナは区別されない)以外の文字で始まる3文字 | かつお カレー 東京都 123 | うなぎ オクラ おでん オレンジ かつどん カレーライス |
Not Like "[あ-お]??" | 「『あ』から『お』(カナ、半角カナは区別されない)のいずれかで文字で始まる3文字」でない | かつお カレー 東京都 123 オレンジ かつどん カレーライス | うなぎ オクラ おでん |
「~で終わる文字列」の例
条件式 | 意味 | あてはまる文字列の例 | あてはまらない文字列の例 |
---|---|---|---|
Like "*東京" | 「東京」で終わる | 東京 大東京 首都大学東京 | 西東京市 |
Like "?東京" | 「東京」で終わる3文字 | 南東京 | 東京 東京都 東京特許許可局 |
Like "##東京" | 2つの数字で始まり「東京」で終わる4文字 | 03東京 03東京 | 東京 〇三東京 |
「~を含む文字列」の例
条件式 | 意味 | あてはまる文字列の例 | あてはまらない文字列の例 |
---|---|---|---|
Like "*東京*" | 「東京」を含む | 東京 東京都 西東京市 首都大学東京 | 西京東支部 TOKYO |
Like "*?東京?*" | 「東京」を途中(最初と最後以外)に含み、かつ、「東京」で始まってもよく終わってもよい | 西東京市 東京東京東京 | 東京 東京都 首都大学東京 |
Like "*東京*" And Not Like "東京*" And Not Like "*東京" | 「東京」を途中(最初と最後以外)に含み、かつ、「東京」で始まりもせず終わりもしない | 西東京市 | 東京 東京都 東京東京東京 首都大学東京 |
応用例
クエリを開くたびに検索値を入力させるパラメータクエリと、Like及びワイルドカードによる検索を併用することができます。
例えば、抽出条件欄に「[値を入力してください]」と記入した場合、入力された値と一致する文字列しか抽出されませんが、「Like "*"& [値を入力してください] &"*"」と記入すると、入力された値を含む文字列を抽出できます。
また、通常の場合パラメータクエリに値を入力しなければレコードは1つも抽出されません。そうではなくすべてのレコードを抽出したい場合にも、Likeとワイルドカードを利用できます。詳しくは次の記事を参照ください。