SQLite 的 LIKE 子句 用于模糊匹配字符串,常用于 WHERE 或 HAVING,支持通配符进行模式搜索。
基本语法
WHERE column_name LIKE pattern
LIKE不区分大小写(SQLite 默认)- 支持两个通配符:
%:匹配 任意长度(包括 0 个)字符_:匹配 单个 字符
示例表结构
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT,
code TEXT, -- 如: PROD-001, LAPTOP-15
category TEXT,
tags TEXT -- 逗号分隔,如: electronics, portable, 5G
);
INSERT INTO products (name, code, category, tags) VALUES
('iPhone 15 Pro', 'IPH-15P', 'Smartphone', 'electronics, 5G, premium'),
('MacBook Air M2', 'MBA-M2', 'Laptop', 'electronics, portable'),
('T-Shirt Cotton', 'TSH-001', 'Clothing', 'casual, summer'),
('Coffee Maker', 'CM-100', 'Home', 'kitchen, electronics'),
('Yoga Mat', 'YM-BLUE', 'Sports', 'fitness, portable');
1. 基础模式匹配
| 模式 | 说明 | 示例 |
|---|---|---|
'A%' | 以 A 开头 | 'i%' → 匹配 iPhone 15 Pro |
'%book' | 以 book 结尾 | '%book' → 匹配 MacBook Air M2 |
'%phone%' | 包含 phone | 匹配 iPhone 15 Pro |
'___' | 恰好 3 个字符 | '___' → 匹配 TSH, CM- 等 |
'T_H%' | T开头,H为第3个,任意结尾 | 匹配 T-Shirt |
-- 查找名称包含 "phone" 的商品
SELECT name FROM products WHERE name LIKE '%phone%';
-- 结果: iPhone 15 Pro
2. 常见使用场景
-- 1. 以数字开头的编码
WHERE code LIKE '[0-9]%'
-- 2. 名称以 "Mac" 开头
WHERE name LIKE 'Mac%'
-- 3. 标签包含 "portable"
WHERE tags LIKE '%portable%'
-- 4. 名称第2个字符是 'o'
WHERE name LIKE '_o%'
3. 组合多个 LIKE
-- 名称包含 "Pro" 且 标签包含 "premium"
WHERE name LIKE '%Pro%' AND tags LIKE '%premium%'
-- 名称以 "i" 或 "M" 开头
WHERE name LIKE 'i%' OR name LIKE 'M%'
4. 区分大小写?→ 用 GLOB 或 LOWER()
LIKE 默认不区分大小写:
WHERE name LIKE '%iphone%' -- 能匹配 iPhone, IPHONE, Iphone
如需区分大小写:
-- 方法1:使用 GLOB(支持 * 和 ?)
WHERE name GLOB '*iPhone*'
-- 方法2:转换小写比较
WHERE LOWER(name) LIKE '%iphone%'
5. 转义特殊字符(% 和 _)
如果要查找字面上的 % 或 _:
-- 查找包含下划线的 code(如 TSH_001)
WHERE code LIKE '%\_%' ESCAPE '\'
或使用方括号(SQLite 支持有限):
WHERE code LIKE '%[_]%'
6. 性能优化
- 为
LIKE列建索引(仅对'abc%'形式有效):
CREATE INDEX idx_name_prefix ON products(name);
-- 加速 WHERE name LIKE 'iPh%'
'abc%'→ 可使用索引'%abc'或'%abc%'→ 全表扫描
7. 实战查询示例
-- 查找:电子产品,且名称包含数字,或标签包含 "5G"
SELECT name, category, tags
FROM products
WHERE category = 'electronics'
AND (name REGEXP '\d+' OR tags LIKE '%5G%');
注意:
REGEXP需启用(默认未开启)
8. 快速参考表
| 模式 | 含义 | 匹配示例 |
|---|---|---|
A% | 以 A 开头 | Apple, Ant |
%A | 以 A 结尾 | Data, China |
%A% | 包含 A | Cat, Amazing |
_A_ | 3个字符,中间是 A | CAT, BAD |
A\_B% | 含 A_B | A_B123 |
最佳实践
| 建议 | 说明 |
|---|---|
| 优先使用前缀匹配 | 'abc%' 可走索引 |
| 避免全模糊 | '%abc%' 性能差 |
| 大文本用 FTS | 全文搜索用 FTS5 表 |
| 预览结果 | 先 SELECT 再操作 |
-- 安全做法:先看要匹配的行
SELECT * FROM products WHERE name LIKE '%pro%';
需要我帮你写一个针对你表的 LIKE 查询吗?
请提供字段名和想搜索的关键词!