Skip to content

SQL Like

SQL LIKE 运算符:字符串模式匹配

Section titled “SQL LIKE 运算符:字符串模式匹配”

LIKE 运算符用于 WHERE 子句,以在包含文本数据的列中搜索指定的模式。它是进行灵活字符串比较的强大工具。

当您需要查找列的字符串值匹配特定模式而不是精确字符串的行时,LIKE 运算符是您的解决方案。它使用通配符来定义这些模式。

SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

  • % (百分号):代表零个、一个或多个字符。
    • 'A%':匹配任何以 ‘A’ 开头的字符串。(例如 ‘Apple’, ‘Ant’, ‘A’)
    • '%Z':匹配任何以 ‘Z’ 结尾的字符串。(例如 ‘Buzz’, ‘Quiz’)
    • '%word%':匹配任何包含 ‘word’ 的字符串。(例如 ‘keyword’, ‘password’)
  • _ (下划线):代表单个字符。
    • 'H_t':匹配 ‘Hot’, ‘Hat’, ‘Hit’。
    • '__X%':匹配 ‘X’ 为第三个字符的任何字符串。

大小写敏感性:LIKE 运算符的大小写敏感性取决于数据库系统和列的排序规则设置。有些数据库默认区分大小写(例如 PostgreSQL),而另一些则不区分(例如 SQL Server, Windows 上的 MySQL)。您通常可以使用 LOWER() 或 UPPER() 函数对列和模式进行处理以进行不区分大小写的搜索:WHERE LOWER(column_name) LIKE LOWER(pattern);

我们使用 Northwind 示例数据库。

“Customers” 表的示例数据:

CustomerID CustomerName ContactName Address City PostalCode Country

1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany

2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico

3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK

5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

  1. 选择 City 以字母 “L” 开头的所有客户:
SELECT CustomerName, City
FROM Customers
WHERE City LIKE 'L%';
  1. 选择 City 以字母 “n” 结尾的所有客户:
SELECT CustomerName, City
FROM Customers
WHERE City LIKE '%n';
  1. 选择 Country 包含模式 “land” 的所有客户:
SELECT CustomerName, Country
FROM Customers
WHERE Country LIKE '%land%';
  1. 选择 CustomerName 第二个字母是 ‘o’ 的所有客户:
SELECT CustomerName
FROM Customers
WHERE CustomerName LIKE '_o%';

NOT LIKE 运算符允许您选择不匹配模式的记录。

  1. 选择 Country 不包含模式 “land” 的所有客户:
SELECT CustomerName, Country
FROM Customers
WHERE Country NOT LIKE '%land%';

如果您需要搜索字面意义上的 % 或 _ 字符,必须使用 ESCAPE 子句。例如,查找包含 ‘50%’ 的名称:

SELECT ProductName
FROM Products
WHERE ProductName LIKE '%50\%%' ESCAPE '\'; -- '\' 在此处是转义字符

实际应用:LIKE 对于搜索功能、基于部分信息的 数据筛选 和 数据验证规则 至关重要。