Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

SIMILAR TO

SIMILAR TO 运算符使用 SQL 标准正则表达式模式来匹配字符串表达式(如列名称)。SQL 正则表达式可包含一组模式匹配元字符,包括 LIKE 运算符支持的两个元字符。

仅当模式与整个字符串匹配时,SIMILAR TO 运算符才会返回 true,这与 POSIX 正则表达式的行为不同(其中的模式可与字符串的任何部分匹配)。

SIMILAR TO 执行区分大小写的匹配。

注意

使用 SIMILAR TO 的正则表达式匹配的计算成本高昂。我们建议尽可能使用 LIKE,尤其是在处理非常多的行时。例如,下列查询的功能相同,但使用 LIKE 的查询相比于使用正则表达式的查询的执行速度快若干倍:

Copy
select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';

语法

Copy
expression [ NOT ] SIMILAR TO pattern [ ESCAPE 'escape_char' ]

参数

expression

有效的 UTF-8 字符表达式(如列名称)。

SIMILAR TO

SIMILAR TO 对 expression 中的整个字符串执行区分大小写的模式匹配。

pattern

有效的 UTF-8 字符表达式,表示 SQL 标准正则表达式模式。

escape_char

将对模式中的元字符进行转义的字符表达式。默认为两个反斜杠 ('\\')。

如果 pattern 不包含元字符,则模式仅表示字符串本身。

其中一个字符表达式可以是 CHAR 或 VARCHAR 数据类型。如果它们不同,Amazon Redshift 会将 pattern 转换为 expression 的数据类型。

SIMILAR TO 支持下列模式匹配元字符:

运算符 描述
% 匹配任意序列的零个或多个字符。
_ 匹配任何单个字符。
| 表示替换(两个替换中的一个)。
* 重复上一项目零次或更多次。
+ 重复上一项目一次或更多次。
? 重复上一项目零次或一次。
{m} 重复上一项目正好 m 次。
{m,} 重复上一项目 m 次或更多次。
{m,n} 重复上一项目至少 m 次且不超过 n 次。
() 圆括号将项分组为单个逻辑项。
[...] 括号表达式指定一个字符类,正如在 POSIX 正则表达式中一样。

示例

下表显示了使用 SIMILAR TO 的模式匹配的示例:

表达式 返回值
'abc' SIMILAR TO 'abc' True
'abc' SIMILAR TO '_b_' True
'abc' SIMILAR TO '_A_' False
'abc' SIMILAR TO '%(b|d)%' True
'abc' SIMILAR TO '(b|c)%' False
'AbcAbcdefgefg12efgefg12' SIMILAR TO '((Ab)?c)+d((efg)+(12))+' True
'aaaaaab11111xy' SIMILAR TO 'a{6}_ [0-9]{5}(x|y){2}' True
'$0.87' SIMILAR TO '$[0-9]+(.[0-9][0-9])?' True

以下示例查找名称包含“E”或“H”的所有城市:

Copy
select distinct city from users where city similar to '%E%|%H%' order by city; city ----------------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights Chino Hills Citrus Heights East Hartford

以下示例使用默认转义字符串(“\\”)搜索包含“_”的字符串:

Copy
select tablename, "column" from pg_table_def where "column" similar to '%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)

以下示例指定“^”作为转义字符串,然后使用此转义字符串搜索包含“_”的字符串:

Copy
select tablename, "column" from pg_table_def where "column" similar to '%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)

本页内容: