1 Fork me on GitHub

19. SQL--Like子句:模糊匹配

1. 前言

sql like 子句用于在 where 语句中进行模糊匹配,它会将给定的匹配模式和某个字段进行比较,匹配成功则选取,否则不选取。

like 子句可以和通配符一起使用:

通配符说明
百分号(%) 代表零个、一个或者多个任意的字符。
下划线(_) 代表单个字符或者数字。
[charlist] 字符列表中的任何单一字符。可以使用连字符(-)根据 ASCII 编码指定一个字符范围,例如:
  • [0-9] 表示从 0 到 9 的任一数字;
  • [a-z] 表示小写英文字母;
  • [a-zA-Z] 表示英文字母,不区分大小写;
  • [a-zA-Z0-9] 表示英文字母和阿拉伯数字。
[^charlist] 或 [!charlist] 不在字符列表中的任何单一字符。同上,也可以使用连字符(-)指定一个字符范围。

2. 语法

SQL LIKE 子句的基本语法格式如下:

select from table_name where column like 'pattern'

pattern 表示给定的匹配模式。

您也可以使用 and 或者 or 运算符连接多个条件,例如:

select from table_name
where column1 like 'pattern1' and column2 like 'pattern2'

3. 示例

下面给出了一些示例,这些示例展示了 LIKE 可以使用的匹配模式:

序号示例和说明
1 WHERE uv LIKE '200%'
查找 uv 字段中以 200 开头的值。
2 WHERE uv LIKE '%200%'
查找 uv 字段中包含 200 的值(200 可以在开头、末尾或者中间的任意位置)。
3 WHERE uv LIKE '_00%'
查找 uv 字段中第二个和第三个字符都是 0 的值。
4 WHERE uv LIKE '2_%_%'
查找 uv 字段中以 2 开头,且长度至少为 3 的任意值。
5 WHERE uv LIKE '%2'
查找 uv 字段中以 2 结尾的值。
6 WHERE name LIKE '%sh%'
查找 name 字段中包含 sh 的值。
7 WHERE name LIKE '[xyz]'
查找 name 字段中至少包含 xyz 其中一个字符的值。
8 WHERE name LIKE '[^a-e]'
查找 name 字段中不包含 a-e 中任何一个字符的值。


让我们看一个真实的例子,现在有如下所示的 website 表:

+----+----------------+----------------------------+-----+-------+---------+---------+
| id | name           | url                        | age | alexa | uv      | country |
+----+----------------+----------------------------+-----+-------+---------+---------+
|  1 | 百度           | https://www.baidu.com/     |  21 |     4 |  5010.5 | CN      |
|  2 | 淘宝           | https://www.taobao.com/    |  17 |     8 | 3996.75 | CN      |
|  3 | C语言中文网    | http://c.biancheng.net/    |  12 |  7923 |   11.62 | CN      |
|  4 | Google         | https://www.google.com/    |  23 |     1 |   36474 | US      |
|  5 | GitHub         | https://github.com/        |  13 |    95 |   216.3 | US      |
|  6 | Stack Overflow | https://stackoverflow.com/ |  16 |    48 |   592.2 | US      |
|  7 | Yandex         | http://www.yandex.ru/      |  11 |    53 |  591.82 | RU      |
|  8 | VK             | https://vk.com/            |  23 |    23 |    1206 | RU      |
+----+----------------+----------------------------+-----+-------+---------+---------+

下面的 SQL 语句将查找 uv 字段中以 59 开头的记录:

select * from website where uv like '59%';

该语句的执行结果为:

+----+----------------+----------------------------+-----+-------+--------+---------+
| id | name           | url                        | age | alexa | uv     | country |
+----+----------------+----------------------------+-----+-------+--------+---------+
|  6 | Stack Overflow | https://stackoverflow.com/ |  16 |    48 |  592.2 | US      |
|  7 | Yandex         | http://www.yandex.ru/      |  11 |    53 | 591.82 | RU      |
+----+----------------+----------------------------+-----+-------+--------+---------+

 

posted @ 2022-08-30 17:42  v_jjling  阅读(1002)  评论(0编辑  收藏  举报
AmazingCounters.com