📜  匹配字符串任何部分的 SQL 查询(1)

📅  最后修改于: 2023-12-03 15:22:47.830000             🧑  作者: Mango

匹配字符串任何部分的 SQL 查询

在 SQL 中,可以使用 LIKE 运算符来匹配字符串的任何部分。LIKE 运算符用于比较以字符串形式存储的数据,可以使用通配符来匹配任意字符。

通配符

在 LIKE 命令中,有两种通配符:百分号(%)和下划线(_)。

  • % 匹配零个或多个字符。
  • _ 匹配任意一个字符。

例如,以下命令将返回所有以字母a开头和以字母c结尾的字符串。

SELECT * FROM table_name WHERE column_name LIKE 'a%c';
示例

假设有以下数据表:

+----+----------+
| id | name     |
+----+----------+
|  1 | Adam     |
|  2 | Alice    |
|  3 | Bob      |
|  4 | Charles  |
|  5 | Dave     |
|  6 | David    |
|  7 | Eve      |
|  8 | Frank    |
|  9 | George   |
+----+----------+
查询所有以字母a开头的名字
SELECT * FROM table_name WHERE name LIKE 'a%';

结果:

+----+--------+
| id | name   |
+----+--------+
|  1 | Adam   |
|  2 | Alice  |
+----+--------+
查询所有以字母e结尾的名字
SELECT * FROM table_name WHERE name LIKE '%e';

结果:

+----+-------+
| id | name  |
+----+-------+
|  7 | Eve   |
+----+-------+
查询所有包含字母a的名字
SELECT * FROM table_name WHERE name LIKE '%a%';

结果:

+----+----------+
| id | name     |
+----+----------+
|  1 | Adam     |
|  2 | Alice    |
|  4 | Charles  |
|  6 | David    |
|  7 | Eve      |
|  8 | Frank    |
|  9 | George   |
+----+----------+
查询所有名字长度为5并且第二位为字母a的名称。
SELECT * FROM table_name WHERE name LIKE '_a___';

结果:

+----+-------+
| id | name  |
+----+-------+
|  2 | Alice |
|  7 | Eve   |
+----+-------+
注意事项

使用 LIKE 命令时,一定要注意通配符的位置,不然会导致意想不到的结果。例如:

SELECT * FROM table_name WHERE name LIKE '%a';

将会匹配所有以字母a结尾的字符串,而不是包含字母a的字符串。如果要匹配包含字母a的字符串,应该使用:

SELECT * FROM table_name WHERE name LIKE '%a%';

另外,LIKE 命令通常比其他比较运算符(如=、>、<等)运行较慢,因为它需要在所有匹配的记录中遍历每个字符。因此,在处理大量数据时,应该尽量避免使用 LIKE 命令。