这是一个非常重要且常见的SQL特性,尤其是在Hive、Spark SQL或类似的大数据SQL引擎中。
简单来说,最核心的区别是:
LIKE:进行简单的模式匹配,只支持两个通配符:% 和 _。
RLIKE(或 REGEXP):进行复杂的模式匹配,使用完整的正则表达式,功能极其强大。
下面我们进行详细的对比和解释。

对比表格
特性    LIKE    RLIKE (或 REGEXP)
全称    -    Regular Like (正则匹配)
功能    简单模式匹配    复杂模式匹配
标准    SQL 标准    非SQL标准,但在很多数据库和大数据引擎中通用
匹配规则    使用通配符    使用正则表达式
通配符/元字符    % : 匹配任意多个字符(0个或多个)
_ : 匹配一个任意字符    ., *, +, ?, [], {}, ^, $, `    ` 等所有正则元字符
性能    通常更快,优化更好    通常更慢,因为正则表达式引擎更复杂
灵活性    低,只能进行非常基础的匹配    极高,可以描述极其复杂的文本模式
详细说明与示例
假设我们有一个表 products,其中有一个 name 字段,包含以下值:

Apple iPhone 13
Samsung Galaxy S21
Google Pixel 6 Pro
123ABC
Cat
Catalog

1. 使用 LIKE 的例子
LIKE 只能使用 % 和 _。

目标    语句    结果
查找所有以 "Apple" 开头的产品    SELECT ... WHERE name LIKE 'Apple%'    Apple iPhone 13
查找所有包含 "Galaxy" 的产品    SELECT ... WHERE name LIKE '%Galaxy%'    Samsung Galaxy S21
查找名字是 "Cat" 后面跟任意两个字符的产品    SELECT ... WHERE name LIKE 'Cat__'    Catalog (因为 Catalog 是 ‘Cat’ + ‘al’,但 ‘al’ 是2个字符,所以能匹配?这里注意:Catalog 是7个字符,Cat__ 模式只匹配前5个字符是 ‘Cat’ + 任意2个字符的记录,所以实际上不会匹配 Catalog。更准确的例子应该是 WHERE name LIKE 'Cat___' 来匹配像 “Cats” 这样的4字母单词,但 Catalog 不匹配。这个例子可能有点误导,更好的例子是:查找所有名称以 “C” 开头,第三个字母是 “t” 的记录:WHERE name LIKE 'C_t%',这会匹配 “Cat” 和 “Catalog”)
查找名字以 "6" 结尾的产品    SELECT ... WHERE name LIKE '%6'    Google Pixel 6 Pro (不,因为它以 ‘Pro’ 结尾,不会匹配) 123ABC (也不会,它以 ‘C’ 结尾)。这个查询不会返回任何结果。正确的应该是 WHERE name LIKE '%6%' 来查找包含6的产品。
LIKE 的关键点:功能有限,但对于简单的“开头是...”、“结尾是...”、“包含...”这类查询足够了,而且效率高。

2. 使用 RLIKE 的例子
RLIKE 使用正则表达式,功能强大得多。

目标    语句    结果    解释
查找包含数字的产品    SELECT ... WHERE name RLIKE '\\d' ;    Apple iPhone 13, Samsung Galaxy S21, Google Pixel 6 Pro, 123ABC    \d 是正则表达式中的元字符,表示任意数字(0-9)。在字符串中需要用两个反斜杠 \\ 来转义。
查找包含一个或多个数字的产品    SELECT ... WHERE name RLIKE '\\d+';        同上    + 表示前面的元素(数字)出现一次或多次。
查找名字是 "Cat" 或 "Dog"    `SELECT ... WHERE name RLIKE '^(Cat    Dog)$'`    ;    Cat    ^ 表示开头,$ 表示结尾,`    ` 表示“或”。这个模式精确匹配字符串 "Cat" 或 "Dog"。
查找以元音字母(a, e, i, o, u)开头的产品    SELECT ... WHERE name RLIKE '^[AEIOUaeiou]'    ;    Apple iPhone 13 (以 ‘A’ 开头)    [] 表示字符组,匹配组内任意一个字符。
查找型号格式为 "字母+空格+数字" 的产品(如 "S21", "13")    SELECT ... WHERE name RLIKE '[A-Za-z]+\\s\\d+';        Samsung Galaxy S21, Apple iPhone 13    [A-Za-z]+ 匹配一个或多个字母,\\s 匹配一个空白字符(空格、制表符等),\\d+ 匹配一个或多个数字。
RLIKE 的关键点:几乎可以匹配任何你能描述出来的文本模式,但语法更复杂,编写难度更高,而且计算开销更大。

总结与如何选择
何时使用 LIKE    何时使用 RLIKE
场景    简单的、固定的模式匹配。
例如:
- 查找所有以 “ERROR” 开头的日志条目。
- 查找邮箱地址来自 “@company.com” 的用户。    复杂的、灵活的模式匹配。
例如:
- 从文本中提取符合特定格式的电话号码或身份证号。
- 验证邮箱地址的格式是否正确。
- 查找包含数字或特殊字符的记录。
经验法则    如果能用 LIKE 解决问题,就优先使用 LIKE。因为它通常性能更好,更符合SQL标准,可读性也更高。    
当你需要的模式无法用 % 和 _ 描述时,就使用 RLIKE。它是解决复杂文本匹配问题的终极武器。
最后注意:在某些数据库系统(如 MySQL、PostgreSQL)中,这个操作符通常被称为 REGEXP 或 ~,
而不是 RLIKE。RLIKE 这个名称主要出现在 Hive、Spark SQL 等大数据处理框架中。它们的功能基本一致,只是名称不同。

更多推荐