摘要:在本教程中,你将学习如何使用 SQL LIKE
运算符来测试值是否符合某个模式。
SQL LIKE 运算符简介
LIKE 运算符是 SQL 逻辑运算符之一。LIKE
运算符在值与模式匹配时返回真,否则返回假。
LIKE 运算符的语法如下所示
expression LIKE pattern
Code language: SQL (Structured Query Language) (sql)
在此语法中,LIKE
运算符测试表达式是否符合模式。SQL 标准提供两个通配符供你制定模式
-
%
百分号通配符匹配零个、一个或多个字符 -
_
下划线通配符匹配单个字符。
以下显示了一个使用 % 和 _ 通配符的示例
表达式 | 含义 |
---|---|
LIKE 'Kim%' | 匹配一个以 Kim 开头的字符串 |
LIKE '%er' | 匹配一个以 er 结尾的字符串 |
LIKE '%ch%' | 匹配一个包含 ch 的字符串 |
LIKE 'Le_' | 匹配一个以 Le 开头并后跟一个字符的字符串,例如 Les、Len 等 |
LIKE '_uy' | 匹配一个以 uy 结尾并前缀一个字符的字符串,例如 guy |
LIKE '%are_' | 匹配一个包含 are 且以一个字符结尾的字符串 |
LIKE '_are%' | 匹配一个包含 are 且以一个字符开头和以任意多个字符结尾的字符串 |
请注意,除了 % 和 _ 通配符之外,某些数据库系统可能还有其他特定于这些数据库的通配符。
NOT LIKE
若要否定 LIKE
运算符,请使用 NOT
运算符
expression NOT LIKE pattern
NOT LIKE
运算符在表达式与模式不匹配时返回真,否则返回假。
转义字符
若要匹配一个包含通配符(例如 10%
)的字符串,你需要指示 LIKE
运算符将 10%
中的 %
视为普通字符。
为此,你需要在 ESCAPE
子句后明确指定一个转义符
expression LIKE pattern ESCAPE escape_character
Code language: SQL (Structured Query Language) (sql)
例如
value LIKE '%10!%%' ESCAPE '!'
Code language: JavaScript (javascript)
在此示例中,! 是一个转义字符。它指示 LIKE 运算符将 10% 中的 % 视为一个普通字符。
在实践中,你通常会在 WHERE
子句的 SELECT
、UPDATE
和 DELETE
语句中使用 LIKE
运算符。
SQL LIKE 运算符示例
我们将使用 示例数据库 中的 employees
表进行演示。

以下示例使用 LIKE 运算符查找所有名字以 Da
开头的员工
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Da%';
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 105 | David | Austin |
| 109 | Daniel | Faviet |
+-------------+------------+-----------+
Code language: plaintext (plaintext)
以下示例使用 LIKE 运算符查找所有名字以 er
结尾的员工
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%er';
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 103 | Alexander | Hunold |
| 115 | Alexander | Khoo |
| 200 | Jennifer | Whalen |
+-------------+------------+-----------+
Code language: plaintext (plaintext)
以下示例使用 LIKE 运算符查找姓氏包含单词 an
的员工
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
last_name LIKE '%an%';
Code language: SQL (Structured Query Language) (sql)
+-------------+-------------+-----------+
| employee_id | first_name | last_name |
+-------------+-------------+-----------+
| 102 | Lex | De Haan |
| 112 | Jose Manuel | Urman |
| 123 | Shanta | Vollman |
| 178 | Kimberely | Grant |
+-------------+-------------+-----------+
Code language: plaintext (plaintext)
以下语句检索名字以 Jo
开头且后跟至多 2 个字符的员工
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Jo__';
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 110 | John | Chen |
| 145 | John | Russell |
+-------------+------------+-----------+
Code language: plaintext (plaintext)
以下语句使用 LIKE 运算符和 % 和 _ 通配符查找名字以任意数量的字符开头且后跟至多一个字符的员工
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%are_';
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+------------+
| employee_id | first_name | last_name |
+-------------+------------+------------+
| 119 | Karen | Colmenares |
| 146 | Karen | Partners |
+-------------+------------+------------+
SQL NOT LIKE 运算符示例
以下示例使用 NOT LIKE
运算符查找名字以字母 S
开头但不是以 Sh
开头的所有员工
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'S%'
AND first_name NOT LIKE 'Sh%'
ORDER BY
first_name;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 192 | Sarah | Bell |
| 117 | Sigal | Tobias |
| 100 | Steven | King |
| 203 | Susan | Mavris |
+-------------+------------+-----------+
Code language: plaintext (plaintext)
摘要
- 当值与模式匹配时,
LIKE
运算符将返回 真,否则返回 假。 - 使用
NOT
运算符否定 LIK 运算符。 - 使用
%
通配符匹配一个或多个字符 - 使用
_
通配符匹配单个字符。
本教程是否对你有帮助?