LIKE
LIKE 运算符将字符串表达式(如列名称)与使用通配符 %(百分比)和 _(下划线)的模式进行比较。LIKE 模式匹配始终涵盖整个字符串。若要匹配字符串中任意位置的序列,模式必须以百分比符号开始和结尾。
LIKE 区分大小写;ILIKE 不区分大小写。
语法
expression [ NOT ] LIKE | ILIKE pattern [ ESCAPE 'escape_char' ]
参数
- expression
-
有效的 UTF-8 字符表达式(如列名称)。
- LIKE | ILIKE
-
LIKE 执行区分大小写的模式匹配。ILIKE 对单字节 UTF-8 (ASCII) 字符执行不区分大小写的模式匹配。要为多字节字符执行不区分大小写的模式匹配,请将 expression 上的 LOWER 函数和带有 LIKE 函数的 pattern 一起使用。
与比较谓词(例如 = 和 <>)相反,LIKE 和 ILIKE 谓词并不会隐式忽略尾随空格。要忽略尾随空格,请使用 RTRIM 或者将 CHAR 列显式强制转换为 VARCHAR。
~~
运算符等同于 LIKE,而~~*
等同于 ILIKE。此外,!~~
和!~~*
运算符等同于 NOT LIKE 和 NOT ILIKE。 - pattern
-
具有要匹配的模式的有效的 UTF-8 字符表达式。
- escape_char
-
将对模式中的元字符进行转义的字符表达式。默认为两个反斜杠 ('\\')。
如果 pattern 不包含元字符,则模式仅表示字符串本身;在此情况下,LIKE 的行为与等于运算符相同。
其中一个字符表达式可以是 CHAR 或 VARCHAR 数据类型。如果它们不同,Amazon Redshift 会将 pattern 转换为 expression 的数据类型。
LIKE 支持下列模式匹配元字符:
操作符 | 描述 |
---|---|
%
|
匹配任意序列的零个或多个字符。 |
_ |
匹配任何单个字符。 |
示例
下表显示使用 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 ...
以下示例查找第三和第四个字符为“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