Skip to content

SQLite - LIKE 子句

SQLite 的 LIKE 运算符用于 WHERE 子句中,以在字符串列中搜索指定的模式。它是实现灵活文本匹配的强大工具。

LIKE 运算符使用两个通配符:

  • 百分号 (%):代表零个、一个或多个字符。
  • 下划线 (_):代表单个字符。

LIKE 运算符在 WHERE 子句中的用法如下:

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE 'pattern';

以下是常见的模式示例:

模式描述
'A%'查找以 ‘A’ 开头的任何值。
'%a'查找以 ‘a’ 结尾的任何值。
'%lux%'查找在任何位置包含 ‘lux’ 的任何值。
'_r%'查找第二个位置包含 ‘r’ 的任何值。
'A_%'查找以 ‘A’ 开头且至少两个字符长的任何值。
'A__%查找以 ‘A’ 开头且至少三个字符长的任何值。
'B%t'查找以 ‘B’ 开头且以 ‘t’ 结尾的任何值。

让我们考虑一个 CUSTOMERS 表,其中包含以下记录:

ID NAME EMAIL
---------- -------------- ----------------------
1 Paul Smith paul.s@example.com
2 Allen Jones allen.j@work.net
3 Teddy Becker teddy.b@example.com
4 Mark Wright mark.w@example.org
5 David Austin dave.a@work.net

此查询查找所有电子邮件来自 example.com 域的客户:

sqlite> SELECT * FROM CUSTOMERS WHERE EMAIL LIKE '%@example.com';
ID NAME EMAIL
---------- -------------- ----------------------
1 Paul Smith paul.s@example.com
3 Teddy Becker teddy.b@example.com
4 Mark Wright mark.w@example.org

此查询查找所有姓名以 ‘A’ 开头且至少有 5 个字符的客户:

sqlite> SELECT * FROM CUSTOMERS WHERE NAME LIKE 'A____%';
ID NAME EMAIL
---------- -------------- ----------------------
2 Allen Jones allen.j@work.net

如果您需要搜索字面上的 % 或 _ 怎么办?您可以使用 ESCAPE 子句指定一个转义字符。

-- 假设我们有一个折扣表
-- NAME VALUE
-- ----------- -----
-- 'Sale_50' '50%'
-- 'Sale_75' '75%'
-- 查找正好是 '50%' 的折扣
SELECT * FROM DISCOUNTS WHERE VALUE LIKE '50\%' ESCAPE '\';

SQLite 还提供了一个非标准的 GLOB 运算符,它使用 Unix 风格的通配符。默认情况下,它是区分大小写的。

  • 星号 (*):等同于 LIKE 的 %。
  • 问号 (?):等同于 LIKE 的 _。
-- 使用 GLOB 查找以 .net 结尾的电子邮件(区分大小写)
sqlite> SELECT * FROM CUSTOMERS WHERE EMAIL GLOB '*.net';
ID NAME EMAIL
---------- -------------- ------------------
2 Allen Jones allen.j@work.net
5 David Austin dave.a@work.net