九月 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
运算符,通过模式匹配来查询数据。