摘要:在本教程中,您将学习如何使用 SQL LIKE 运算符来测试一个值是否与某个模式匹配。
SQL LIKE 运算符简介 #
LIKE 运算符是 SQL 逻辑运算符之一。如果一个值与模式匹配,LIKE 运算符返回 true,否则返回 false。
以下是 LIKE 运算符的语法:
expression LIKE patternCode language: SQL (Structured Query Language) (sql)在此语法中,LIKE 运算符测试 expression 是否与 pattern 匹配。
SQL 提供了两种通配符来构建模式:
-
%百分号通配符匹配零个、一个或多个字符。 -
_下划线通配符匹配单个字符。
当您在字符串中使用通配符时,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 patternCode language: SQL (Structured Query Language) (sql)如果表达式与模式不匹配,NOT LIKE 运算符返回 true,否则返回 false。
转义字符 #
要匹配包含通配符的字符串,例如 10%,您需要指示 LIKE 运算符将 10% 中的 % 视为普通字符。
为此,您可以在 ESCAPE 子句后显式指定一个转义字符:
expression LIKE pattern ESCAPE escape_characterCode language: SQL (Structured Query Language) (sql)例如:
value LIKE '%10!%%' ESCAPE '!'Code language: SQL (Structured Query Language) (sql)在此示例中,! 是一个转义字符,它指示 LIKE 运算符将紧跟其后的 % 视为普通字符。
在实践中,您通常在 WHERE 子句中使用 LIKE 运算符来筛选值与模式匹配的行。此外,您还可以在 UPDATE 和 DELETE 语句的 WHERE 子句中使用 LIKE 运算符来筛选要更新和删除的行。
SQL LIKE 运算符示例 #
我们将使用示例数据库中的 employees 表进行演示。

查找以特定字符串开头的名字 #
以下查询使用 LIKE 运算符查找所有名字以字符串 Da 开头的员工:
SELECT
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Da%'
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql) first_name | last_name
------------+-----------
Daniel | Faviet
David | AustinCode language: plaintext (plaintext)查找以特定字符串结尾的名字 #
以下语句使用 LIKE 运算符查找名字以 er 结尾的员工:
SELECT
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%er'
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql) first_name | last_name
------------+-----------
Alexander | Hunold
Alexander | Khoo
Jennifer | WhalenCode language: plaintext (plaintext)查找包含特定字符串的名字 #
以下查询使用 LIKE 运算符查找名字中包含 an 的员工:
SELECT
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%an%'
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql) first_name | last_name
-------------+-----------
Alexander | Khoo
Alexander | Hunold
Daniel | Faviet
Diana | Lorentz
Hermann | Baer
Jose Manuel | Urman
Nancy | Greenberg
Shanta | Vollman
Susan | MavrisCode language: plaintext (plaintext)使用 _ 通配符 #
以下查询使用 LIKE 运算符查找名字以 Jo 开头且后跟两个字符的员工:
SELECT
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Jo__'
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql) first_name | last_name
------------+-----------
John | Chen
John | RussellCode language: plaintext (plaintext)组合使用通配符 #
以下查询结合使用 % 和 _ 通配符,查找名字以任意数量字符开头,并以单个字符结尾的员工:
SELECT
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%are_'
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql) first_name | last_name
------------+------------
Karen | Colmenares
Karen | PartnersCode language: plaintext (plaintext)SQL NOT LIKE 运算符示例 #
以下示例使用 NOT LIKE 运算符查找所有名字以字母 S 开头,但不以 Sh 开头的员工:
SELECT
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) first_name | last_name
------------+-----------
Sarah | Bell
Sigal | Tobias
Steven | King
Susan | MavrisCode language: plaintext (plaintext)摘要 #
- 如果一个值与模式匹配,
LIKE运算符返回true,否则返回false。 - 使用
NOT运算符对LIKE运算符取反。 - 使用
%通配符匹配一个或多个字符。 - 使用
_通配符匹配单个字符。
数据库 #
- PostgreSQL LIKE 运算符
- Oracle LIKE 运算符
- SQL Server LIKE 运算符
- MySQL LIKE 运算符
- SQLite LIKE 运算符
- Db2 LIKE 运算符
- MariaDB LIKE 运算符