SQL LIKE子句:模糊匹配
SQL LIKE 子句用于在 WHERE 语句中进行模糊匹配,它会将给定的匹配模式和某个字段进行比较,匹配成功则选取,否则不选取。
LIKE 子句可以和通配符一起使用:
您也可以使用 AND 或者 OR 运算符连接多个条件,例如:
让我们看一个真实的例子,现在有如下所示的 website 表:
LIKE 子句可以和通配符一起使用:
通配符 | 说明 |
---|---|
百分号(%) | 代表零个、一个或者多个任意的字符。 |
下划线(_) | 代表单个字符或者数字。 |
[charlist] |
字符列表中的任何单一字符。可以使用连字符(-)根据 ASCII 编码指定一个字符范围,例如:
|
[^charlist] 或 [!charlist] | 不在字符列表中的任何单一字符。同上,也可以使用连字符(-)指定一个字符范围。 |
语法
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'
示例
下面给出了一些示例,这些示例展示了 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 | +----+----------------+----------------------------+-----+-------+--------+---------+