SQL LIKE

在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%'进行搜索,就会得到以Ss开头的所有列值(如您所见,我们同时拥有”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 |
+--------+------------------+------------+--------+---------+
注意: 如果希望始终以区分大小写的方式处理字段,可在创建数据库或表时,使用区分大小写或二进制排序规则(collation),以避免任何性能问题。


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载