LIKE 模式与通配符
使用带有 % 和 _ 通配符的 LIKE,理解大小写敏感性,并在 PostgreSQL 中优先使用 ILIKE 进行不区分大小写的匹配。
LIKE 模式与通配符 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
LIKE 的作用
LIKE 将字符串与模式进行匹配。它有两个通配符:
%— 任意序列(包括空序列)_— 恰好一个字符
简单示例
按前缀、后缀和子字符串进行匹配:
SELECT email FROM users WHERE email LIKE 'a%'; -- starts with a
SELECT email FROM users WHERE email LIKE '%@gmail.com'; -- ends with @gmail.com
SELECT email FROM users WHERE email LIKE '%admin%'; -- contains admin单字符通配符
_ 恰好匹配一个字符。它非常适合固定宽度的代码:
-- 6-char SKU starting with A:
SELECT * FROM products WHERE sku LIKE 'A_____';
-- US zip+4:
SELECT * FROM addresses WHERE zip LIKE '_____-____';大小写敏感性
在 PostgreSQL 中,LIKE 默认区分大小写。使用 ILIKE 可进行不区分大小写的匹配:
SELECT * FROM users WHERE email LIKE '%@gmail.com'; -- ✗ misses @GMAIL.com
SELECT * FROM users WHERE email ILIKE '%@gmail.com'; -- ✓转义通配符
要匹配字面量 % 或 _,请使用反斜杠进行转义(或者定义自己的 ESCAPE 字符):
-- Match strings that contain '50%':
SELECT * FROM coupons WHERE code LIKE '%50\%%';
-- Custom escape character:
SELECT * FROM coupons WHERE code LIKE '%50!%%' ESCAPE '!';LIKE 与索引
B-tree 索引只对前缀模式有帮助:
-- Uses index (prefix is fixed):
SELECT * FROM users WHERE email LIKE 'alice%';
-- Does NOT use a normal index (leading wildcard):
SELECT * FROM users WHERE email LIKE '%example.com';解决前导通配符搜索问题
对于 "%example%" 搜索,请使用三元组(pg_trgm)GIN 索引,相关内容将在高级索引中介绍。
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX users_email_trgm_idx ON users USING GIN (email gin_trgm_ops);
SELECT * FROM users WHERE email LIKE '%example%'; -- now indexableNOT LIKE
对匹配结果取反:
SELECT * FROM emails WHERE subject NOT LIKE 'RE:%';SIMILAR TO 与正则表达式(PostgreSQL)
要进行更丰富的模式匹配:
-- SIMILAR TO — SQL regex (rarely used)
SELECT 'abc' SIMILAR TO '%(a|b)%'; -- TRUE
-- POSIX regex:
SELECT 'abc123' ~ '^[a-z]+[0-9]+$'; -- TRUE
SELECT 'ABC' ~* 'abc'; -- TRUE (case insensitive)构建搜索框
连接用户搜索框时,请先清理输入中的通配符,以避免出现令人意外的行为:
-- Escape user input's special chars before concatenating to LIKE pattern,
-- or use to_tsquery for word-level search.
SELECT * FROM products
WHERE LOWER(name) LIKE LOWER('%' || $1 || '%');不要重复实现全文搜索
要在文档中进行带排名且理解语言的搜索,请使用 tsvector + GIN,而不要使用 LIKE。相关内容将在后面的高级索引中介绍。
回顾
LIKE 非常适合简单的模式匹配。
%= 任意字符串,_= 一个字符- 使用 ILIKE 进行不区分大小写的匹配
- 前缀搜索使用 B-tree;子字符串搜索需要三元组索引
快速检查
哪个模式可以匹配以 .com 结尾的字符串?
常见问题解答
「LIKE 模式与通配符」课时是免费的吗?
是的 — 「LIKE 模式与通配符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「LIKE 模式与通配符」这节课中我会学到什么?
使用带有 % 和 _ 通配符的 LIKE,理解大小写敏感性,并在 PostgreSQL 中优先使用 ILIKE 进行不区分大小写的匹配。 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「LIKE 模式与通配符」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。