Z
ZHANK
基础查询

模糊匹配 LIKE

掌握 LIKE 通配符、%、_、正则表达式 REGEXP

模糊匹配 LIKE

当你不确定准确的查询值——比如"名字里有'张'的用户"——LIKE 就是做这个的。

学完本章你将: 掌握 %_ 通配符、正则匹配。


LIKE 通配符

sql
-- % :匹配任意个字符(包括0个)
SELECT * FROM users WHERE name LIKE '张%';   -- 以"张"开头
SELECT * FROM users WHERE email LIKE '%@gmail.com'; -- Gmail 邮箱
SELECT * FROM users WHERE title LIKE '%SQL%'; -- 包含"SQL"

-- _ :匹配恰好一个字符
SELECT * FROM users WHERE name LIKE '张_';   -- 姓张,名字只有一个字
SELECT * FROM users WHERE phone LIKE '138________'; -- 138 开头共 11 位

NOT LIKE —— 不匹配

sql
SELECT * FROM users WHERE email NOT LIKE '%@spam.com';

转义特殊字符

如果要搜索 %_ 本身:

sql
-- ESCAPE 指定转义字符
SELECT * FROM files WHERE name LIKE '%100\%%' ESCAPE '\';
-- 匹配包含 "100%" 的文件名

大小写敏感

SQLite 的 LIKE 不区分大小写(ASCII 字符)。MySQL 的 LIKE 取决于列的 collation。

sql
-- SQLite 中以下两条结果一样
SELECT * FROM users WHERE name LIKE 'alice%';
SELECT * FROM users WHERE name LIKE 'ALICE%';

REGEXP —— 正则表达式

LIKE 能力有限,复杂模式用正则:

sql
-- 以字母开头,后跟数字
SELECT * FROM users WHERE name REGEXP '^[A-Za-z][0-9]+$';

-- 匹配邮箱格式
SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

⚠️ SQLite 默认不支持 REGEXP(需要扩展)。MySQL、PostgreSQL 原生支持。