本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
LIKE
LIKE運算子會將字串運算式 (例如資料行名稱) 與使用萬用字元% (百分比) 和 _ (底線) 的樣式進行比較。LIKE模式匹配總是覆蓋整個字符串。若要比對字串中任意位置的序列,模式必須以百分比符號開頭和結尾。
LIKE區分大小寫;ILIKE不區分大小寫。
語法
expression [ NOT ] LIKE | ILIKE pattern [ ESCAPE 'escape_char' ]
引數
- 運算式
-
有效的 UTF -8 個字元運算式,例如欄名稱。
- LIKE | ILIKE
-
LIKE執行區分大小寫的模式匹配。ILIKE對單一位元組 UTF -8 () ASCII 字元執行不區分大小寫的模式比對。若要對多位元組字元執行不區分大小寫的模式比對,請在運算式和 pattern 上使用具有條件的LOWER函數。LIKE
與比較謂詞相反,例如 = 和 <> LIKE 和ILIKE謂詞不會隱含地忽略尾隨空格。若要忽略結尾空格,請使用RTRIM或明確地將CHAR欄轉換為VARCHAR。
運
~~
算子相當於LIKE,~~*
且等於ILIKE。!~~
而且和!~~*
運算子等同於NOTLIKE和NOTILIKE。 - pattern
-
一個有效的 UTF -8 個字符的表達式與要匹配的模式。
- escape_char
-
字元表達式,將會用來逸出模式中的中繼字元。預設值為兩個反斜線 (「\\」)。
如果 pattern 不包含元字符,那麼模式只代表字符串本身; 在這種情況下LIKE,作用相同的 equals 運算符。
任一字符表達式可以是CHAR或VARCHAR數據類型。如果不同,Amazon Redshift 會將 pattern 轉換為 expression 的資料類型。
LIKE支援下列模式比對中繼字元:
運算子 | 描述 |
---|---|
%
|
比對任何 0 的序列或更多字元。 |
_ |
比對任一個單一字元。 |
範例
下表顯示了使用模式匹配的示例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
後跟底線 _
):
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
後跟底線 _
):
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)
下列範例會使用~~*
運算子執行不區分大小寫 (ILIKE) 搜尋以「Ag」開頭的城市。
select distinct city from users where city ~~* 'Ag%' order by city;
city ------------ Agat Agawam Agoura Hills Aguadilla