SQL Wildcards
SQL 通配符
Section titled “SQL 通配符”通配符(wildcard character)是 SQL 中用于替代字符串中任何其他字符的特殊字符。通配符主要与 WHERE 子句中的 LIKE 运算符一起使用,用于在字符串数据中搜索特定的模式。
标准 SQL 通配符
Section titled “标准 SQL 通配符”SQL 定义了两个与 LIKE 运算符一起用于模式匹配的标准通配符:
%(百分号):代表零个、一个或多个字符。_(下划线):代表单个字符。
这些通配符使得 LIKE 运算符比使用简单的相等(=)或不等(!=)运算符进行字符串比较更加灵活。
LIKE 语法:
Section titled “LIKE 语法:”SELECT column_list FROM table_name WHERE column_name LIKE ‘pattern’;
在我们的示例中,我们将使用概念性的“Customers”(客户)表。
“Customers”表的示例数据:
| CustomerID | CustomerName | City | Country |
|---|---|---|---|
| 1 | Alfreds Futterkiste | Berlin | Germany |
| 2 | Ana Trujillo Emparedados y helados | México D.F. | Mexico |
| 3 | Antonio Moreno Taquería | México D.F. | Mexico |
| 4 | Around the Horn | London | UK |
| 5 | Berglunds snabbköp | Luleå | Sweden |
| 6 | Blauer See Delikatessen | Mannheim | Germany |
使用 SQL % 通配符
Section titled “使用 SQL % 通配符”% 通配符匹配任何字符序列(包括空序列)。
示例 1:查找 City 以“ber”开头的客户:
SELECT CustomerName, CityFROM CustomersWHERE City LIKE 'ber%';这将匹配 ‘Berlin’、‘Berkeley’ 等。
示例 2:查找 CustomerName 包含模式“er”的客户:
SELECT CustomerName, CityFROM CustomersWHERE CustomerName LIKE '%er%';这将匹配 ‘Alfreds Futterkiste’、‘Berglunds snabbköp’、‘Blauer See Delikatessen’ 等。
示例 3:查找 Country 以“y”结尾的客户:
SELECT CustomerName, CountryFROM CustomersWHERE Country LIKE '%y';这将匹配 ‘Germany’。
使用 SQL _ 通配符
Section titled “使用 SQL _ 通配符”_ 通配符匹配任何单个字符。
示例 1:查找 City 以任何一个字符开头,后跟“ondon”的客户:
SELECT CustomerName, CityFROM CustomersWHERE City LIKE '_ondon';这将匹配 ‘London’。
示例 2:查找 City 以“L”开头,后跟任意两个字符,然后是“d”,然后是任意一个字符,然后是“n”的客户:
SELECT CustomerName, CityFROM CustomersWHERE City LIKE 'L__d_n%';这可能匹配 ‘London’,如果完整的模式是 ‘L_n_on’(来自原文)。对于 ‘L__d_n%‘,它将匹配像 ‘Luddenham’ 这样的城市(如果存在且匹配)。对于 ‘London’,模式 L_n_on 更具体。
让我们使用一个更清晰的例子:查找长度为 6 个字符且以“in”结尾的城市:
SELECT DISTINCT CityFROM CustomersWHERE City LIKE '____in';这将匹配 ‘Berlin’。
使用 NOT LIKE
Section titled “使用 NOT LIKE”您可以使用 NOT LIKE 来查找不匹配特定模式的字符串。
示例:查找 City 不以“B”开头的客户:
SELECT CustomerName, CityFROM CustomersWHERE City NOT LIKE 'B%';如果您需要在数据中搜索字面值百分号(%)或下划线(_),则需要使用转义字符。ESCAPE 关键词指定转义字符。
示例:查找名称中包含“50%”的产品(假设 “ 是转义字符):
SELECT ProductNameFROM ProductsWHERE ProductName LIKE '%50\%%' ESCAPE '\';常见的转义字符是反斜杠(“),有时也可以是其他字符,如 ! 或 #。
超越基础通配符:正则表达式
Section titled “超越基础通配符:正则表达式”尽管 % 和 _ 是标准且广泛支持的,但某些数据库系统(如 MySQL、PostgreSQL、Oracle 以及具有特定设置的 SQL Server)通过正则表达式(regular expressions)提供了更强大的模式匹配功能。REGEXP、RLIKE、SIMILAR TO 等运算符,或 REGEXP_LIKE() 等函数,允许定义更复杂的模式。
例如,查找以 ‘B’、‘S’ 或 ‘P’ 开头的城市(这在之前使用非标准的 [bsp]% 来完成)可以通过正则表达式来实现,如果您的 RDBMS 支持的话(例如,在 MySQL 中使用 WHERE City REGEXP '^[bsp]' 或在 PostgreSQL 中使用 WHERE City ~ '^[bsp]')。
字符列表通配符,如 [charlist] 或 [^charlist],不是 ANSI SQL 标准的一部分,其支持因数据库系统而异。为了获得更好的通用性,请坚持使用 % 和 _,或者在支持且必要时使用正则表达式。