sql-wildcard-operators
SQL - 带 LIKE 的通配符运算符
Section titled “SQL - 带 LIKE 的通配符运算符”通配符运算符与 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 CustomersWHERE 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’,因为最后的 % 匹配零个或多个字符。
性能和大小写敏感性
Section titled “性能和大小写敏感性”请记住,LIKE 查询,尤其是带有前导通配符('%text')的查询,效率可能较低,因为它们可能会阻止数据库使用索引。对于高级文本搜索,请考虑使用您的关系型数据库管理系统 (RDBMS) 的全文搜索功能。此外,LIKE 的大小写敏感性取决于您的数据库的排序规则设置。