九月 2, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的LIKE和ILIKE运算符通过模式匹配来查询数据。
目录
PostgreSQL LIKE 运算符简介
假设您想要找到一位客户,但您不记得她的确切名字。但是,您可以记得她的名字以类似Jen开头。
如何从数据库中找到准确的客户?您可以通过查看名字列来查找customer表中的客户,看看是否有任何以Jen开头的值。但是,如果客户表包含大量行,则此过程可能会非常耗时。
幸运的是,您可以使用 PostgreSQL 的LIKE运算符,通过以下查询将客户的名字与字符串进行匹配:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Jen%';

请注意,其中WHERE子句包含一个特殊表达式:first_name、LIKE运算符和包含百分号 (%) 的字符串。字符串'Jen%'称为模式。
该查询返回first_name列值以Jen开头且后跟任意字符序列的行。这种技术称为模式匹配。
您可以通过将文字值与通配符组合来构造模式,并使用LIKE或NOT LIKE运算符来查找匹配项。PostgreSQL 为您提供了两个通配符:
- 百分号 (
%) 匹配任何零个或多个字符的序列。 - 下划线符号 (
_) 匹配任何单个字符。
PostgreSQL LIKE运算符的语法如下:
value LIKE pattern
如果value与pattern匹配,则表达式返回 true。
要否定LIKE运算符,请按如下方式使用NOT运算符:
value NOT LIKE pattern
当value与pattern不匹配时,NOT LIKE运算符返回 true。
如果模式不包含任何通配符,则LIKE运算符的行为类似于等于 (=) 运算符。
PostgreSQL LIKE 运算符 – 模式匹配示例
让我们看一些使用LIKE运算符的例子。
简单的 PostgreSQL LIKE 示例
请查看以下示例:
SELECT
'foo' LIKE 'foo', -- true
'foo' LIKE 'f%', -- true
'foo' LIKE '_o_', -- true
'bar' LIKE 'b_'; -- false
怎么运行的。
- 第一个表达式返回 true,因为
foo模式不包含任何通配符,因此该LIKE运算符的作用类似于等于 (=) 运算符。 - 第二个表达式返回 true,因为它匹配以字母
f开头且后跟任意数量的字符的任何字符串。 - 第三个表达式返回 true,因为模式 (
_o_) 匹配以任何单个字符开头、后跟字母o并以任何单个字符结尾的任何字符串。 - 第四个表达式返回 false,因为模式
b_与以字母开头b且后跟任何单个字符的任何字符串匹配。
可以在模式的开头和/或结尾使用通配符。
例如,以下查询返回名字包含er字符串的客户,比如Jenifer、Kimberly等。
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE '%er%'
ORDER BY
first_name;

您可以将百分号 (%) 与下划线 (_) 组合起来构建模式,如下例所示:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE '_her%'
ORDER BY
first_name;

模式_her%匹配任何符合以下条件的字符串:
- 以任意单个字符 (
_) 开头。 - 后面跟着文字字符串
her。 - 并且以任意数量的字符结尾。
返回的名字是 Cheryl、Sherri、Sherry 和 Therasa。
PostgreSQL NOT LIKE 示例
以下查询使用NOT LIKE运算符查找名字不以Jen开头的客户:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name NOT LIKE 'Jen%'
ORDER BY
first_name

PostgreSQL 对 LIKE 运算符的扩展
PostgreSQL 支持类似于LIKE运算符的ILIKE运算符。此外,ILIKE运算符匹配值时不区分大小写。例如:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name ILIKE 'BAR%';

模式BAR%匹配以BAR、Bar、BaR等开头的任何字符串。如果您改用LIKE运算符,查询将不会返回任何行。
PostgreSQL 还提供了一些类似于LIKE, NOT LIKE, ILIKE和NOT ILIKE的运算符,如下所示:
| 运算符 | 等价于 |
|---|---|
| ~~ | LIKE |
| ~~* | ILIKE |
| !~~ | NOT LIKE |
| !~~* | NOT ILIKE |
在本教程中,您学习了如何使用 PostgreSQL 的LIKE和ILIKE运算符,通过模式匹配来查询数据。