SIMILAR TO - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

SIMILAR TO

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

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

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

注意

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

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

语法

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”的城市:

SELECT DISTINCT city FROM users WHERE city SIMILAR TO '%E%|%H%' ORDER BY city LIMIT 5; city ----------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights

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

SELECT tablename, "column" FROM pg_table_def WHERE "column" SIMILAR TO '%start\\_%' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- stcs_abort_idle | idle_start_time stcs_abort_idle | txn_start_time stcs_analyze_compression | start_time stcs_auto_worker_levels | start_level stcs_auto_worker_levels | start_wlm_occupancy

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

SELECT tablename, "column" FROM pg_table_def WHERE "column" SIMILAR TO '%start^_%' ESCAPE '^' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- stcs_abort_idle | idle_start_time stcs_abort_idle | txn_start_time stcs_analyze_compression | start_time stcs_auto_worker_levels | start_level stcs_auto_worker_levels | start_wlm_occupancy