SQL 方言通

首页 / 字符串

RLIKE 正则匹配判断

RLIKE 判断字符串是否匹配正则表达式,只要有一段子串匹配就返回真。MaxCompute、Hive 和 Spark 支持 RLIKE 运算符;StarRocks、Doris 和 Flink 用 REGEXP 函数;Hologres 文档中没有对应的运算符,需要借助 REGEXP_MATCH。各引擎的正则语法和返回类型不同。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持A RLIKE B与 A REGEXP B 相同。B 为空串时报错,A 或 B 为 NULL 时返回 NULL。官方文档
Hologres需改写REGEXP_MATCH(str, pattern) IS NOT NULL字符串函数中没有 RLIKE。REGEXP_MATCH 在匹配时返回由分组组成的数组;未匹配时的返回值文档没有写明,建议实测。官方文档
StarRocks需改写regexp(expr, pattern)匹配返回 1,否则返回 0,任一参数为 NULL 时返回 NULL。官方文档
Doris需改写REGEXP(str, pattern)返回布尔值。默认使用 RE2 语法,不支持零宽断言;会话变量 enable_extended_regex 设为 true 后才支持。官方文档
Hive支持A RLIKE BA 中任一子串匹配 Java 正则 B 时返回 TRUE,任一参数为 NULL 时返回 NULL。A REGEXP B 效果相同。官方文档
Spark SQL支持str RLIKE regexp使用 Java 正则。函数写法 rlike(str, regexp) 也可用;regexp 和 regexp_like 3.2.0 起提供,含义相同。官方文档
Flink SQL需改写REGEXP(string1, string2)string1 中任一子串匹配 Java 正则 string2 时返回 TRUE,任一参数为 NULL 时返回 NULL。官方文档

迁移注意事项

示例

筛选以 1 开头的 11 位手机号

MaxCompute
SELECT phone FROM users WHERE phone RLIKE '^1[0-9]{10}$';
Hologres
SELECT phone FROM users WHERE REGEXP_MATCH(phone, '^1[0-9]{10}$') IS NOT NULL;
StarRocks
SELECT phone FROM users WHERE regexp(phone, '^1[0-9]{10}$');
Doris
SELECT phone FROM users WHERE REGEXP(phone, '^1[0-9]{10}$');
Hive
SELECT phone FROM users WHERE phone RLIKE '^1[0-9]{10}$';
Spark SQL
SELECT phone FROM users WHERE phone RLIKE '^1[0-9]{10}$';
Flink SQL
SELECT phone FROM users WHERE REGEXP(phone, '^1[0-9]{10}$');

同类函数

核对日期: · 提交勘误