LIKE
LIKE 演算子は、列名などの文字列式を、ワイルドカード文字 % (パーセント) および _ (アンダースコア) を使用したパターンと比較します。LIKE パターンマッチングは常に文字列全体を網羅します。文字列内の任意の場所にあるシーケンスをマッチングするには、パターンがパーセント符号で始まりパーセント符号で終了する必要があります。
LIKE は大文字小文字を区別し、ILIKE は大文字小文字を区別しません。
構文
expression [ NOT ] LIKE | ILIKE pattern [ ESCAPE 'escape_char' ]
引数
- expression
-
列名など、有効な UTF-8 文字式。
- LIKE | ILIKE
-
LIKE は大文字小文字を区別するパターンマッチングを実行します。ILIKE は、シングルバイト UTF-8 (ASCII) 文字に対して大文字小文字を区別しないパターンマッチングを実行します。マルチバイト文字に対して大文字と小文字を区別しないパターンの一致を実行するには、LIKE 条件の pattern と pattern で LOWER 関数を使用します。
= や <> などの比較述語とは対照的に、述語 LIKE と ILIKE は、末尾の空白を暗黙的に無視しません。末尾のスペースを無視するには、RTRIM を使用するか、または CHAR 列を VARCHAR に明示的にキャストします。
~~
演算子は LIKE に相当し、~~*
は ILIKE に相当します。また、!~~
および!~~*
演算子は、NOT LIKE および NOT ILIKE に相当します。 - pattern
-
マッチングするパターンが含まれる有効な UTF-8 文字式。
- escape_char
-
パターン内でメタ文字をエスケープする文字式。デフォルトは 2 個のバックスラッシュ (「\\」) です。
pattern にメタ文字が含まれていない場合、pattern は文字列そのものを表現するにすぎません。その場合、LIKE は等号演算子と同じ働きをします。
どちらの文字式も CHAR または VARCHAR のデータ型になることができます。文字式の型が異なる場合、Amazon Redshift は pattern のデータ型を expression のデータ型に変換します。
LIKE では、次のパターンマッチングメタ文字をサポートしています。
演算子 | 説明 |
---|---|
%
|
ゼロ個以上の任意の文字シーケンスをマッチングします。 |
_ |
任意の 1 文字をマッチングします。 |
例
次の例では、LIKE を使用したパターンマッチングの例を示します。
式 | 戻り値 |
---|---|
'abc' LIKE 'abc' |
True |
'abc' LIKE 'a%' |
True |
'abc' LIKE '_B_' |
False |
'abc' ILIKE '_B_' |
True |
'abc' LIKE 'c%' |
False |
次の例では、名前が「E」で始まるすべての市を見つけます。
select distinct city from users where city like 'E%' order by city; city --------------- East Hartford East Lansing East Rutherford East St. Louis Easthampton Easton Eatontown Eau Claire ...
次の例では、姓に「ten」が含まれるユーザーを見つけます。
select distinct lastname from users where lastname like '%ten%' order by lastname; lastname ------------- Christensen Wooten ...
次の例は、複数のパターンを一致させる方法を示しています。
select distinct lastname from tickit.users where lastname like 'Chris%' or lastname like '%Wooten' order by lastname; lastname ------------- Christensen Christian Wooten ...
次の例では、3 番目と 4 番目の文字が「ea」になっている市を見つけます。コマンドでは ILIKE を使用して、大文字小文字の区別なしを実演します。
select distinct city from users where city ilike '__EA%' order by city; city ------------- Brea Clearwater Great Falls Ocean City Olean Wheaton (6 rows)
次の例では、デフォルトのエスケープ文字列 (\\) を使用して「start_」を含む文字列を検索します (テキスト start
、それに続いてアンダースコア _
)。
select tablename, "column" from pg_table_def where "column" like '%start\\_%' limit 5; tablename | column -------------------+--------------- stl_s3client | start_time stl_tr_conflict | xact_start_ts stl_undone | undo_start_ts stl_unload_log | start_time stl_vacuum_detail | start_row (5 rows)
次の例では、エスケープ文字として '^' を指定し、そのエスケープ文字を使用して「start_」を含む文字列を検索します (テキスト start
、それに続いてアンダースコア _
)。
select tablename, "column" from pg_table_def where "column" like '%start^_%' escape '^' limit 5; tablename | column -------------------+--------------- stl_s3client | start_time stl_tr_conflict | xact_start_ts stl_undone | undo_start_ts stl_unload_log | start_time stl_vacuum_detail | start_row (5 rows)
次の例では、~~*
演算子を使用して「Ag」で始まる都市の大文字と小文字を区別しない (ILIKE) 検索を行います。
select distinct city from users where city ~~* 'Ag%' order by city;
city ------------ Agat Agawam Agoura Hills Aguadilla