SQLite Like 子句

SQLite 的 LIKE 子句 用于模糊匹配字符串,常用于 WHEREHAVING,支持通配符进行模式搜索。


基本语法

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. 区分大小写?→ 用 GLOBLOWER()

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%包含 ACat, Amazing
_A_3个字符,中间是 ACAT, BAD
A\_B%含 A_BA_B123

最佳实践

建议说明
优先使用前缀匹配'abc%' 可走索引
避免全模糊'%abc%' 性能差
大文本用 FTS全文搜索用 FTS5
预览结果SELECT 再操作
-- 安全做法:先看要匹配的行
SELECT * FROM products WHERE name LIKE '%pro%';

需要我帮你写一个针对你表的 LIKE 查询吗?
请提供字段名和想搜索的关键词!

文章已创建 2305

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部