SQL ワイルドカード
1. SQL ワイルドカード文字
ワイルドカード文字は、ストリング(文字列)内の一つの文字、あるいは複数の文字を置換するために使用されます。
ワイルドカード文字は、LIKE 演算子と共に使用されます。LIKE 演算子は WHERE 句内で使用され、カラム内の指定されたパターンを検索します。
1.1 例(自分専用の SQL Server を取得)
'a' で始まるすべての顧客をリターンします:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';2. ワイルドカード文字一覧
| 記号 | 説明 |
|---|---|
| % | 0文字以上の任意の文字列を表す |
| _ | 任意の1文字を表す |
| [ ] | 括弧内のいずれかの1文字を表す |
| ^ | 括弧内に含まれない任意の文字を表す |
| - | 指定した範囲内の任意の1文字を表す |
| { } | エスケープされた任意の文字を表す |
PostgreSQL および MySQL データベースではサポートされていません。
Oracle データベースでのみサポートされています。
3. デモ用データベース
以下は、例題で使用する Customers テーブルの抜粋です。
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
4. % ワイルドカードの使用
% ワイルドカードは、0 文字以上の任意の数の文字を表します。
4.1 例
'es' で終わるパターンのすべての顧客をリターンします:
-- 'es' で終わる名前を検索 --
SELECT * FROM Customers
WHERE CustomerName LIKE '%es';4.2 例
'mer' というパターンを含んでいるすべての顧客をリターンします:
-- 名前のどこかに 'mer' が含まれるレコードを検索 --
SELECT * FROM Customers
WHERE CustomerName LIKE '%mer%';5. _ ワイルドカードの使用
_ ワイルドカードは、単一の文字を表します。
任意の文字や数字を指定できますが、一つの _ は必ず一文字(一文字のみ)に対応します。
5.1 例
任意の 1 文字で始まり、その後に "ondon" と続く City を持つすべての顧客をリターンします:
-- 1文字 + 'ondon' の都市名を検索 (例: London) --
SELECT * FROM Customers
WHERE City LIKE '_ondon';5.2 例
"L" で始まり、その後に任意の 3 文字が続き、"on" で終わる City を持つすべての顧客をリターンします:
-- 'L' + 任意3文字 + 'on' の都市名を検索 (例: London) --
SELECT * FROM Customers
WHERE City LIKE 'L___on';6. [] ワイルドカードの使用
[] ワイルドカードは、括弧内の文字のいずれかが一致した場合に結果をリターンします。
6.1 例
"b"、"s"、または "p" のいずれかで始まるすべての顧客をリターンします:
-- 'b', 's', 'p' のいずれかで始まる名前を検索 --
SELECT * FROM Customers
WHERE CustomerName LIKE '[bsp]%';7. - ワイルドカードの使用
- ワイルドカードを使用すると、[] 内で文字の範囲を指定できます。
7.1 例
"a"、"b"、"c"、"d"、"e"、または "f" で始まるすべての顧客をリターンします:
-- 'a' から 'f' の範囲の文字で始まる名前を検索 --
SELECT * FROM Customers
WHERE CustomerName LIKE '[a-f]%';8. ワイルドカードの組み合わせ
% や _ などの任意のワイルドカードを組み合わせて使用することが可能です。
8.1 例
"a" で始まり、長さが少なくとも 3 文字以上あるすべての顧客をリターンします:
-- 'a' で始まり、後ろに最低2文字以上続くパターン --
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';8.2 例
2 文字目に "r" があるすべての顧客をリターンします:
-- 1文字目不問、2文字目が 'r' のパターン --
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';9. ワイルドカードを使用しない場合
ワイルドカードが指定されていない場合、そのフレーズと完全に一致する(完全一致)結果のみがリターンされます。
9.1 例
Country が Spain であるすべての顧客をリターンします:
-- 'Spain' と完全に一致する国名を検索 --
SELECT * FROM Customers
WHERE Country LIKE 'Spain';10. Microsoft Access のワイルドカード
Microsoft Access データベースでは、異なるワイルドカード記号が使用されます。
| 記号 | 説明 | 例 |
|---|---|---|
| * | 0文字以上の任意の文字列を表す | bl* は bl, black, blue, blob に一致 |
| ? | 任意の1文字を表す | h?t は hot, hat, hit に一致 |
| [ ] | 括弧内のいずれかの1文字を表す | h[oa]t は hot, hat に一致(hit は不可) |
| ! | 括弧内に含まれない任意の文字を表す | h[!oa]t は hit に一致(hot, hat は不可) |
| - | 指定した範囲内の任意の1文字を表す | c[a-b]t は cat, cbt に一致 |
| # | 任意の1つの数字を表す | 2#5 は 205, 215, 225...295 に一致 |