0Pricing
SQL Academy · 课时

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 indexable

NOT 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. LIKE 模式与通配符
  2. 使用 IN 和 NOT IN 处理集合
  3. 使用 BETWEEN 处理范围
  4. IS NULL、IS NOT NULL 与 COALESCE
← 返回 SQL Academy