模式匹配操作符
描述
模式匹配操作符用于比较字符类型的数据。
操作符介绍
操作符 | 作用 | 示例 |
---|---|---|
如果 | SELECT 'ABCD' LIKE '%C_' | |
如果 | SELECT 'ABCD' REGEXP 'A.*D' |
LIKE
LIKE 条件指定一个涉及模式匹配的测试。等值比较运算符(=)将一个字符值精确匹配到另一个字符值,而 LIKE 条件则通过在第一个值中搜索第二个值指定的模式,将一个字符值的一部分与另一个字符值进行匹配。
语法如下:
<char1> [ NOT ] LIKE <char2> [ ESCAPE 'char_escape' ]
其中:
- char1 是一个字符表达式(如字符列),称为搜索串。
- char2 是一个字符表达式,通常是一个字面量,称为模式串。
- char_escape (可选) 是一个字符表达式,必须是一个长度为1的字符 ( ascii 编码下 )。 它允许您定义转义字符,如果您不提供char_escape,则默认 ‘ \ ’是转义字符。
所有字符表达式(char1、char2)都可以是 CHAR、VARCHAR 或 STRING 数据类型中的任何一种。如果它们不同,则 Doris 会将它们全部转换为 VARCHAR 或者 STRING。
模式中可以包含特殊的模式匹配字符:
- 模式中的下划线 (_) 与值中的一个字符完全匹配。
- 模式中的百分号 (%) 可以与值中的零个或多个字符匹配。模式 '%' 不能与 NULL 匹配。
示例
select "%a" like "\%_";
结果如下,因为 "%" 是特殊字符,所以需要用 "%" 进行转义才能正确匹配。
+-----------------+
| "%a" like "\%_" |
+-----------------+
| 1 |
+-----------------+
select "%a" like "a%_" ESCAPE "a";
与之前的例子的区别在于有指定 "a" 作为转义字符。
+----------------------------+
| "%a" like "a%_" ESCAPE "a" |
+----------------------------+
| 1 |
+----------------------------+
REGEXP(RLIKE)
REGEXP 与 LIKE 条件类似,不同之处在于 REGEXP 执行正则表达式匹配,而不是 LIKE 执行的简单模式匹配。此条件使用输入字符集定义的字符来评估字符串。
语法如下:
<char1> [ NOT ] { REGEXP | RLIKE } <char2>
其中:
- char1 是一个字符表达式(如字符列),称为搜索值。
- char2 是一个字符表达式,通常是一个字面量,称为模式。
所有字符表达式(char1、char2)都可以是 CHAR、VARCHAR 或 STRING 数据类型中的任何一种。如果它们不同,则 Doris 会将它们全部转换为 VARCHAR 或者 STRING。