💽

ワイルドカード(%)配置場所の覚え方

2024/01/07に公開

データベースからデータを取得する際にワイルドカード(%)を文字列検索時にどこに配置したらいいのか分からなくなる時ありませんか。
筆者は今回シェアする覚え方を知るまで毎回頭混乱していました。
もし未だ混乱するときがあるって方は是非これから紹介するtipsを参考にしてみてください。

Tips
結論から言うと
%を"~"と置換する だけです。

具体例を見てみましょう。

下記のようなfruitテーブルをもつデータベースがあります。

ID name dest
1 なつみかん 愛媛
2 りんご 青森
3 すいかバー 山形
4 冷凍みかん 和歌山
5 りんごジュース 長野
6 みかんジュース 静岡
7 みかんプリン 熊本
8 すいか 千葉

このデータベースから名前に"みかん"が入っているデータを取得したい場合(完全一致検索)には

SELECT name
FROM fruit
WHERE name LIKE "%みかん%";

とSQL文を書くと

ID name dest
1 なつみかん 愛媛
4 冷凍みかん 和歌山
6 みかんジュース 静岡
8 みかんプリン 熊本

のようにnameに"みかん"が一致した文字列のレコードが取得できます。

この場合だと前後いずれかに"みかん"が入っていればよく%の配置場所は文字列の前後に配置すればよいのでさほど困らないかと思います。

では次にnameに"みかん"から始まるデータのみ取得したい場合(前方一致検索)だとワイルドカード(%)はどちらに配置したらいいでしょうか。

正解のSQL文は下記になります。

SELECT name
FROM fruit
WHERE name LIKE "みかん%";

実行結果は

ID name dest
6 みかんジュース 静岡
8 みかんプリン 熊本

ここで筆者は感覚的に前方一致検索と聞くとワイルドカード(%)を前に置く癖がありました。
そこで%を"~"に変換してみます。
先ほどの例でいうと"みかん"からはじまる文字列検索をする場合"みかん~"と考えるのです。

WHERE name LIKE "みかん〜";

皆さんは思い出せないお店の店名を相手に曖昧に伝える際、"~(なんとか)カフェ"などで曖昧表現をする事ないでしょうか。

それと一緒で、前方一致検索の場合は"みかん〜(なんとか)"の文字列検索をしたいので%はみかんの後方に付くと感覚的に分かりやすくなりました。

同じように後方一致検索の場合も"〜(なんとか)みかん"を検索したいので%はみかんの前につければいいのです。

WHERE name LIKE "〜みかん";

こんなの書き続けていたら自然と覚えるものですが、こういう些細な点が初心者にとってプログラミングを挫折するポイントでもあり、筆者と同じ経験した事がある人もいるのではないかと思い、今回記事にした所存です。

X(旧Twitter)では日々の技術学習に関する発信を行なっています。まだまだ弱弱弱弱ITエンジニアですが、一緒に勉強・成長していける仲間が増えたら嬉しいのでフォロー宜しくお願いします🙇

Discussion