SQL LIKE子句:模糊匹配

11个月前 (04-28)
SQL LIKE 子句用于在 WHERE 语句中进行模糊匹配,它会将给定的匹配模式和某个字段进行比较,匹配成功则选取,否则不选取。

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

通配符

说明

百分号(%)

代表零个、一个或者多个任意的字符。

下划线(_)

代表单个字符或者数字。

[charlist]

字符列表中的任何单一字符。可以使用连字符(-)根据 ASCII 编码指定一个字符范围,例如:

  • [0-9] 表示从 0 到 9 的任一数字;

  • [a-z] 表示小写英文字母;

  • [a-zA-Z] 表示英文字母,不区分大小写;

  • [a-zA-Z0-9] 表示英文字母和数字。

[^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.taob网站站点" rel="nofollow" />

SELECT * FROM website WHERE uv LIKE '59%';

该语句的执行结果为:

+----+----------------+----------------------------+-----+-------+--------+---------+

| id | name | url | age | alexa | uv | country |

+----+----------------+----------------------------+-----+-------+--------+---------+

| 6 | Stack Overflow | https://stackoverflo网站站点" rel="nofollow" />