跳到主要内容

模式匹配操作符

描述

模式匹配操作符用于比较字符类型的数据。

操作符介绍

操作符作用示例
[NOT] LIKE 如果 与模式 [不]匹配,则为 TRUE。在 中,字符 % 与任何零个或多个字符的字符串匹配(空值除外)。字符 _ 与任何单个字符匹配。如果通配符字符前面有转义字符,则将其视为文字字符。SELECT 'ABCD' LIKE '%C_'
[NOT] {REGEXP | RLIKE} 如果 与模式 [不]匹配,则为 TRUE。正则表达式的具体规则,请参考本文后续的 REGEXP 章节。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。