問題:
文字列のパターンに一致する部分文字列を見つけたい。
例:
私たちのデータベースには、次の列にデータがあるcustomerという名前のテーブルがあります:id
、first_name
、last_name
、およびcity
。
id | first_name | last_name | 都市 |
---|---|---|---|
1 | アラン | ワトソン | マドリード |
2 | リサ | 黒 | シンガポール |
3 | ローラ | ウィリアムズ | シアトル |
4 | ミラノ | レンガ | ソウル |
SQLでのパターンマッチングの例をいくつか見てみましょう。
例1:
都市名が文字「S」で始まる各顧客の名、姓、都市を表示してみましょう。
解決策:
SELECT last_name, first_name, city FROM customer WHERE city LIKE 'S%';
last_name | first_name | 都市 |
---|---|---|
リサ | 黒 | S インガポア |
ミラノ | レンガ | S eoul |
ローラ | ウィリアムズ | S 食べる |
ゼロ個以上の不明な文字を表す%ワイルドカードを使用しました。このワイルドカードは、文字列のどこでも使用できます。
例2:
都市名に正確に5文字が含まれている各顧客の名、姓、都市を表示してみましょう。
解決策:
SELECT last_name, first_name, city FROM customer WHERE city LIKE '_____';
結果は次のとおりです。
last_name | first_name | 都市 |
---|---|---|
ミラノ | レンガ | ソウル |
アンダースコアワイルドカードは、単一の不明な文字を表すために使用できます。したがって、そのうちの5つを連続して使用することにより、5文字の長さのすべての文字列を表すことができます。この例では、その説明に一致する唯一の都市はソウルです。
例3:
都市が文字「S」で始まり、最後から3番目の文字が文字「o」である各顧客の名、姓、および都市を表示してみましょう。
解決策:
SELECT last_name, first_name, city FROM customer WHERE city LIKE 'S%o__';
結果は次のとおりです。
last_name | first_name | 都市 |
---|---|---|
リサ | 黒 | S ingap o re |
ミラノ | レンガ | S e o ul |
クエリは2つのレコードのみを返しました: SのLisaBlack ingap o SのreとMilanBrick e o ul。これらの都市は、指定されたパターンに一致します。ここでは、両方のワイルドカードを組み合わせて、より具体的なパターンを生成しました。大文字の「S」で始まり、最後から3番目の文字が小文字の「o」である限り、その後に任意の数の他の文字を含むすべての文字列です。 '
ディスカッション:
文字列が特定のパターンに一致するレコードを選択する場合は、LIKE
を使用できます。 WHERE
の条件としての句 句。 WHERE
の後 、列の名前をリストします(例:city
)の後にLIKE
文字列パターンを指定する句(例:'S%o__'
)検索します。
例で見たように、ワイルドカードと呼ばれる2つの特殊文字を使用できます。 不明な文字を表すには:
- 「%」ワイルドカードは0個以上の文字を示します。
- 「_」ワイルドカードは任意の1文字を示します。
これらのワイルドカードを組み合わせて、非常に強力な結果を得ることができます。複数のLIKE
をチェーンすることもできます 調子。最後に、NOT
を使用できます しない文字列を検索する演算子 与えられたパターンに一致します。