在SQL中,也可以使用LIKE
操作符执行部分匹配或模式匹配。
LIKE
操作符允许为一个或多个字符串指定通配符。可以使用以下两个通配符:
- 百分号(
%
) – 匹配任意数量的字符,甚至是0个字符。 - 下划线(
_
) – 只匹配一个字符
下面是一些示例,演示如何将LIKE
操作符与通配符一起使用。
语句 | 意义 | 返回值 |
---|---|---|
WHERE name LIKE 'Da%' |
查找以Da开头的名称 | David, Davidson |
WHERE name LIKE '%th' |
找出以th结尾的名字 | Elizabeth, Smith |
WHERE name LIKE '%on%' |
查找包含on的名称 | Davidson, Toni |
WHERE name LIKE 'Sa_' |
查找以Sm开头的名称,并且名称后面最多只有一个字符 | Sam |
WHERE name LIKE '_oy' |
查找以oy结尾的名称,并且名称前面最多只有一个字符 | Joy, Roy |
WHERE name LIKE '_an_' |
查找包含an的名称,并且开头和结尾最多只有一个字符 | Dana, Hans |
WHERE name LIKE '%ar_' |
查找包含ar的名称,以任意数量的字符开头,最多以一个字符结尾 | Richard, Karl |
WHERE name LIKE '_ar%' |
查找包含ar的名称,最多以一个字符开始,以任意数量的字符结尾 | Karl, Mariya |
让我们看一些例子。
假设我们的数据库中有一个employees表,其中包含以下记录:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 |
| 2 | Tony Montana | 2002-07-15 | 6500 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 7200 | 3 |
| 5 | Martin Blank | 2008-06-24 | 5600 | NULL |
| 6 | simons bistro | 2009-04-01 | 6000 | 1 |
+--------+------------------+------------+--------+---------+
现在,假设你想找出所有名字以S开头的员工。
SELECT * FROM employees
WHERE emp_name LIKE 'S%';
执行查询后,您将得到如下输出:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
| 6 | simons bistro | 2009-04-01 | 6000 | 1 |
+--------+------------------+------------+--------+---------+
在MySQL中,非二进制字符串(CHAR、VARCHAR、TEXT)比较,默认情况下是不区分大小写的,而二进制字符串(binary、VARBINARY、BLOB)比较是区分的。
这意味着,如果使用'S%'
进行搜索,就会得到以S
或s
开头的所有列值(如您所见,我们同时拥有”Sarah”和”simons”)。但是,如果你想使这个搜索区分大小写,可以使用二进制操作符,如下所示:
-- Syntax for MySQL Database
SELECT * FROM employees
WHERE BINARY emp_name LIKE 'S%';
现在,只返回名字以大写字母S
开头的员工:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
+--------+------------------+------------+--------+---------+