模糊匹配 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 原生支持。