MySQL MySQL LIKE操作符可以使用哪些不同的通配符字符?
MySQL中的LIKE操作符可以用于搜索指定字符串的匹配项。使用通配符字符,可以增强LIKE操作符的弹性。本文将会介绍MySQL中支持的各种通配符字符,并通过示例代码来演示如何使用它们。
阅读更多:MySQL 教程
数据准备
本文中的代码将在下面的示例表中运行:
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`description` text DEFAULT NULL,
`price` decimal(10,2) NOT NULL DEFAULT '0.00',
PRIMARY KEY (`id`),
KEY `index_name` (`name`)
) ENGINE=InnoDB CHARSET=utf8mb4;
INSERT INTO `product` (`name`, `description`, `price`)
VALUES ('Apple iPhone 11', '一部智能手机', '7999.00'),
('Samsung Galaxy S21', '一部智能手机', '6499.00'),
('Huawei P30', '一部智能手机', '3988.00'),
('Apple iPad Pro', '一款平板电脑', '7699.00'),
('Xiaomi Mi Air Purifier', '一款空气净化器', '999.00'),
('Phillips Sonicare Electric Toothbrush', '一只电动牙刷', '499.00');
创建了一个名为product的表,包含了几个智能手机、平板电脑和其他一些产品。现在,我们已经准备好使用MySQL的LIKE操作符和通配符字符来搜索这个表。
百分号(%)通配符
MySQL中最常用的通配符是%,用于匹配任意字符。
SELECT * FROM product WHERE name LIKE '%phone%';
上述代码将会在name列中查找包含字符串phone的所有行。可以看到,返回了所有的智能手机产品:
| id | name | description | price |
|---|---|---|---|
| 1 | Apple iPhone 11 | 一部智能手机 | 7999.00 |
| 2 | Samsung Galaxy S21 | 一部智能手机 | 6499.00 |
| 3 | Huawei P30 | 一部智能手机 | 3988.00 |
我们可以使用%通配符来匹配任何字符,可以在搜索字符串的任何位置找到它。例如,如果我们要查找名字以Air结尾的所有产品,我们可以使用以下代码:
SELECT * FROM product WHERE name LIKE '%Air';
以下是输出结果:
| id | name | description | price |
|---|---|---|---|
| 5 | Xiaomi Mi Air Purifier | 一款空气净化器 | 999.00 |
请注意,在%通配符前后加上其他字符,可以更好地过滤出我们需要的数据,避免无意义的搜索结果。例如,在%phone%搜索字符串中,我们指定了单词phone的边界,因此不会返回description中包含该单词的结果。
下划线(_)通配符
另一个常用的通配符是_,用于匹配单个任意字符。例如,以下代码将查找所有名字中包含2个字符的产品:
SELECT * FROM product WHERE name LIKE '__';
输出结果如下:
| id | name | description | price |
|---|---|---|---|
| 1 | Apple iPhone 11 | 一部智能手机 | 7999.00 |
| 3 | Huawei P30 | 一部智能手机 | 3988.00 |
方括号([])通配符
方括号[]通配符与_通配符类似,但它可以匹配指定范围内的字符。例如,以下代码将查找名字中以字母A开头或以字母i结尾的产品:
SELECT * FROM product WHERE name LIKE '[A]%' OR name LIKE '%i';
输出结果如下:
| id | name | description | price |
|---|---|---|---|
| 1 | Apple iPhone 11 | 一部智能手机 | 7999.00 |
| 4 | Apple iPad Pro | 一款平板电脑 | 7699.00 |
| 6 | Phillips Sonicare Electric Toothbrush | 一只电动牙刷 | 499.00 |
在这个例子中,我们使用了[A]来匹配所有以A字符开头的产品名称,%通配符后面的字符表示该名称可以以任何字符结尾。另一方面,使用%i来查找所有以i结尾的产品名称。
方括号[]通配符还允许在同一位置上匹配多个字符。例如,以下代码将查找名字中包含i或o字符的产品:
SELECT * FROM product WHERE name LIKE '%[io]%';
输出结果如下:
| id | name | description | price |
|---|---|---|---|
| 2 | Samsung Galaxy S21 | 一部智能手机 | 6499.00 |
| 3 | Huawei P30 | 一部智能手机 | 3988.00 |
| 4 | Apple iPad Pro | 一款平板电脑 | 7699.00 |
| 6 | Phillips Sonicare Electric Toothbrush | 一只电动牙刷 | 499.00 |
此查询将匹配名称中包含任何i或o字符的产品。请注意,方括号[]中的字符顺序并不重要。例如,[io]等同于[oi]。
脱字符(^)通配符
脱字符^通配符可以用于匹配未包含指定字符的名称。例如,以下代码将查找名称中不包含Apple字符串的所有产品:
SELECT * FROM product WHERE name LIKE '%[^Apple]%';
输出结果如下:
| id | name | description | price |
|---|---|---|---|
| 2 | Samsung Galaxy S21 | 一部智能手机 | 6499.00 |
| 3 | Huawei P30 | 一部智能手机 | 3988.00 |
| 5 | Xiaomi Mi Air Purifier | 一款空气净化器 | 999.00 |
| 6 | Phillips Sonicare Electric Toothbrush | 一只电动牙刷 | 499.00 |
这条查询使用[^Apple]匹配名称中不包含Apple字符串的所有产品。请注意,在[]内使用脱字符^表示否定匹配。
百分号(%)和下划线(_)转义字符
在MySQL中,%和_通配符可以作为普通字符使用。如果要在搜索中包含这两个字符,必须使用转义字符\来转义它们。以下代码将查找名称中包含1%1字符串的所有产品:
SELECT * FROM product WHERE name LIKE '%1\%1%';
输出结果如下:
| id | name | description | price |
|---|---|---|---|
| 1 | Apple iPhone 11 | 一部智能手机 | 7999.00 |
此查询使用\%转义字符来查找名称中包含1%1字符串的所有产品。类似地,可以使用\_来查找名称中包含1_1字符串的所有产品。
结论
MySQL LIKE操作符是一个非常强大的查询工具,它可用于使用各种通配符字符来提高搜索的灵活性。本文中介绍了最常用的几种通配符,包括百分号%、下划线_、方括号[]和脱字符^。我们通过示例代码演示了如何使用这些通配符来进行MySQL的LIKE操作符搜索。
需要注意的是,通配符字符的使用需要谨慎。如果不合理地使用通配符会导致查询变得非常慢,或产生不必要的查询结果。因此,在使用通配符字符时,请确认搜索结果的准确性并考虑查询的性能。
综上所述,了解并熟练使用MySQL中的LIKE操作符和各种通配符字符,将有助于我们更高效地在数据库中进行数据搜索。
极客笔记