Likeとワイルドカードによる検索と条件式の例

 文字列を検索・抽出するときに「『市』を含む文字列」とか「『山』で終わる文字列」といった条件を設けたいことがあります。
 このような場合、Like演算子と、ワイルドカードという文字を使って検索することができます。ワイルドカードとは「どんな文字(文字列)にもあてはまる文字」です。これにより「『山』で終わる文字列」は「Like "*山"」という条件で検索できます。「*」は「0文字以上の文字列」を表すワイルドカードですので、「山」の字の前がどのような文字列でも(何もなく、単に「山」の1文字であっても)この条件で検索できます。
 Like演算子とワイルドカードによる検索は「あいまい検索」などとも呼ばれます。以下ではこのような検索の使用例と、ワイルドカードとして使える文字、さらにさまざまな条件式の設定例を見てみます。

使用例

f:id:accs2014:20180429153151p:plain:right:w400

 クエリでの簡単な使用例です。
 このようなテーブルから、「山岳名が『山』で終わるもの」を抽出します。


f:id:accs2014:20180429153147p:plain:right:w400

 クエリデザインの画面です。
 山岳名列の抽出条件欄に「Like "*山"」と記入します。


f:id:accs2014:20180429153145p:plain:right:w300

 クエリのデータシートビューです。
 山岳名の長さにかからわず、最後の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とワイルドカードを利用できます。詳しくは次の記事を参照ください。

www.accessdbstudy.net