SQLのワイルドカードについてまとめてます。
SQLのワイルドカードを使ったサンプルコード集
SQLでワイルドカードを使った検索を行うには、like句にワイルドカード文字(「%」や「_」)を使った文字列を指定します。
以下のサンプルでは、A%は、Aで始まり任意の文字列が続く文字列、S%はSで始まり任意の文字列が続く文字列を表します。
SELECT * FROM employees WHERE first_name like 'A%' and last_name not like 'S%' limit 10; +--------+------------+------------+--------------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+--------------+--------+------------+ | 10006 | 1953-04-20 | Anneke | Preusig | F | 1989-06-02 | | 10033 | 1956-11-14 | Arif | Merlo | M | 1987-03-18 | | 10035 | 1953-02-08 | Alain | Chappelet | M | 1988-09-05 | | 10036 | 1959-08-10 | Adamantios | Portugali | M | 1992-01-03 | | 10039 | 1959-10-01 | Alejandro | Brender | M | 1988-01-19 | | 10059 | 1953-09-19 | Alejandro | McAlpine | F | 1991-06-26 | | 10062 | 1961-11-02 | Anoosh | Peyn | M | 1991-08-30 | | 10091 | 1955-10-04 | Amabile | Gomatam | M | 1992-11-18 | | 10094 | 1957-05-25 | Arumugam | Ossenbruggen | F | 1987-04-18 | | 10103 | 1953-11-26 | Akemi | Birch | M | 1986-12-02 | +--------+------------+------------+--------------+--------+------------+ 10 rows in set (0.00 sec)
【関連記事】
▶SQL where句のサンプルコード集 ワイルドカードやサブクエリを使った複雑な条件指定
任意の1文字にマッチするワイルドカード「_」
「_」(アンダースコア)は、任意の一文字にマッチするワイルドカードです。「_%ra」は、Practiceにはマッチしますが、Racticeにはマッチしません。※大文字小文字の違いは無視されます。
「_%ra%_」は、「ra」を含む文字列だが文字列の最初は「ra」ではないかつ、最後は「ra」ではないという指定になります。言い方を変えると、文字列の途中にraが現れるものにのみマッチングします。
mysql> SELECT * FROM employees WHERE first_name like '_%ra%_' limit 10; +--------+------------+------------+----------------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+----------------+--------+------------+ | 10025 | 1958-10-31 | Prasadram | Heyers | M | 1987-08-17 | | 10037 | 1963-07-22 | Pradeep | Makrucki | M | 1990-12-05 | | 10102 | 1959-11-04 | Paraskevi | Luby | F | 1994-01-26 | | 10124 | 1962-05-23 | Geraldo | Marwedel | M | 1991-09-05 | | 10168 | 1964-09-11 | Dharmaraja | Stassinopoulos | M | 1986-12-06 | | 10177 | 1954-11-08 | Pragnesh | Iisaka | M | 1993-02-06 | | 10198 | 1953-05-28 | Pranav | Furedi | M | 1985-08-31 | | 10250 | 1958-08-12 | Serap | Etalle | M | 1992-08-30 | | 10297 | 1956-06-17 | Narain | Oaver | F | 1986-05-28 | | 10347 | 1953-10-03 | Pradeep | Kaminger | M | 1985-12-12 | +--------+------------+------------+----------------+--------+------------+ 10 rows in set (0.00 sec)
【関連記事】
▶SQLの部分一致にはlikeとワイルドカードを指定 中間一致指定も可能
「_」は必ず1文字とマッチングするので、任意の五文字であれば、「_____」(アンダースコアが5個)でマッチング可能です。
なお、主要データベースでは、単純なワイルドカード以外に正規表現によるマッチング機能を搭載したものも多いです。例えば、MySQLではrlikeとして独自拡張の正規表現パターンマッチングがサポートされています。
【関連記事】
▶MySQL likeのサンプルコード集 複数のパターンマッチングをするには?
まとめ
- likeに続くマッチング文字列指定で、ワイルドカードによる検索が可能。
- ワイルドカード文字列は%と_(アンダースコア)の2種
- 主要データベースでは、正規表現をサポートされている