SQL LIKE

摘要:在本教程中,你将学习如何使用 SQL LIKE 运算符来测试值是否符合某个模式。

SQL LIKE 运算符简介

LIKE 运算符是 SQL 逻辑运算符之一。LIKE 运算符在值与模式匹配时返回真,否则返回假。

LIKE 运算符的语法如下所示

expression LIKE patternCode 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_characterCode language: SQL (Structured Query Language) (sql)

例如

value LIKE '%10!%%' ESCAPE '!'Code language: JavaScript (javascript)

在此示例中,! 是一个转义字符。它指示 LIKE 运算符将 10% 中的 % 视为一个普通字符。

在实践中,你通常会在  WHERE 子句的 SELECTUPDATEDELETE 语句中使用 LIKE 运算符。

SQL LIKE 运算符示例

我们将使用 示例数据库 中的 employees 表进行演示。

employees_table

以下示例使用 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 运算符。
  • 使用 % 通配符匹配一个或多个字符
  • 使用 _ 通配符匹配单个字符。
本教程是否对你有帮助?