Skip to content

sql-wildcard-operators

通配符运算符与 LIKE 操作符一起使用,用于对字符串数据执行模式匹配。当您不知道要查找的确切值时,它们允许您创建灵活的搜索条件。

SQL 支持两种主要的通配符运算符:

通配符描述
% (百分号)匹配零个或多个字符的任何序列。
_ (下划线)匹配任意单个字符。

注意:一些较旧的系统(如 MS Access)使用 * 代替 %,使用 ? 代替 _,但 % 和 _ 是标准用法。

以下是这些通配符如何组合的一些实用示例:

LIKE 模式描述
'Sm%'查找以 ‘Sm’ 开头的值(例如,‘Smith’, ‘Small’)。
'%th'查找以 ‘th’ 结尾的值(例如,‘Smith’, ‘Month’)。
'%art%'查找包含 ‘art’ 的任何位置的值(例如,‘Carter’, ‘Artichoke’)。
'J_ne'查找以 ‘J’ 开头,以 ‘ne’ 结尾,且中间只有一个字符的值(例如,‘Jane’, ‘June’)。
'__a%'查找第三个字符是 ‘a’ 的值(例如,‘Frank’, ‘Maria’)。

让我们使用 Customers 表进行演示:

+----+-----------+-----------+
| ID | Name | City |
+----+-----------+-----------+
| 1 | John Smith| New York |
| 2 | Jane Doe | London |
| 3 | Sam Brown | Tokyo |
| 4 | Jon Stewart | New York|
| 5 | Art Vandelay| New York|
+----+-----------+-----------+

以下查询查找所有名字以 ‘J’ 开头且第三个字母是 ‘n’ 的客户。

SELECT * FROM Customers
WHERE Name LIKE 'J_n%';

这将产生以下结果:

+----+-------------+----------+
| ID | Name | City |
+----+-------------+----------+
| 1 | John Smith | New York |
| 2 | Jane Doe | London |
| 4 | Jon Stewart | New York |
+----+-------------+----------+

请注意,它同时匹配了 ‘John’ 和 ‘Jane’,因为 _ 匹配单个字符(‘o’ 或 ‘a’),也匹配了 ‘Jon’,因为最后的 % 匹配零个或多个字符。

请记住,LIKE 查询,尤其是带有前导通配符('%text')的查询,效率可能较低,因为它们可能会阻止数据库使用索引。对于高级文本搜索,请考虑使用您的关系型数据库管理系统 (RDBMS) 的全文搜索功能。此外,LIKE 的大小写敏感性取决于您的数据库的排序规则设置。