PostgreSQL 教程: LIKE

九月 2, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的LIKEILIKE运算符通过模式匹配来查询数据。

PostgreSQL LIKE 运算符简介

假设您想要找到一位客户,但您不记得她的确切名字。但是,您可以记得她的名字以类似Jen开头。

如何从数据库中找到准确的客户?您可以通过查看名字列来查找customer表中的客户,看看是否有任何以Jen开头的值。但是,如果客户表包含大量行,则此过程可能会非常耗时。

幸运的是,您可以使用 PostgreSQL 的LIKE运算符,通过以下查询将客户的名字与字符串进行匹配:

SELECT
	first_name,
    last_name
FROM
	customer
WHERE
	first_name LIKE 'Jen%';

PostgreSQL LIKE operator

请注意,其中WHERE子句包含一个特殊表达式:first_nameLIKE运算符和包含百分号 (%) 的字符串。字符串'Jen%'称为模式。

该查询返回first_name列值以Jen开头且后跟任意字符序列的行。这种技术称为模式匹配。

您可以通过将文字值与通配符组合来构造模式,并使用LIKENOT LIKE运算符来查找匹配项。PostgreSQL 为您提供了两个通配符:

  • 百分号 (%) 匹配任何零个或多个字符的序列。
  • 下划线符号 (_) 匹配任何单个字符。

PostgreSQL LIKE运算符的语法如下:

value LIKE pattern

如果valuepattern匹配,则表达式返回 true。

要否定LIKE运算符,请按如下方式使用NOT运算符:

value NOT LIKE pattern

valuepattern不匹配时,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字符串的客户,比如JeniferKimberly等。

SELECT
	first_name,
    last_name
FROM
	customer
WHERE
	first_name LIKE '%er%'
ORDER BY
    first_name;

PostgreSQL LIKE example

您可以将百分号 (%) 与下划线 (_) 组合起来构建模式,如下例所示:

SELECT
	first_name,
	last_name
FROM
	customer
WHERE
	first_name LIKE '_her%'
ORDER BY 
        first_name;

PostgreSQL LIKE example - combining wildcards

模式_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 NOT LIKE example

PostgreSQL 对 LIKE 运算符的扩展

PostgreSQL 支持类似于LIKE运算符的ILIKE运算符。此外,ILIKE运算符匹配值时不区分大小写。例如:

SELECT
	first_name,
	last_name
FROM
	customer
WHERE
	first_name ILIKE 'BAR%';

PostgreSQL ILIKE example

模式BAR%匹配以BARBarBaR等开头的任何字符串。如果您改用LIKE运算符,查询将不会返回任何行。

PostgreSQL 还提供了一些类似于LIKE, NOT LIKE, ILIKENOT ILIKE的运算符,如下所示:

运算符 等价于
~~ LIKE
~~* ILIKE
!~~ NOT LIKE
!~~* NOT ILIKE

在本教程中,您学习了如何使用 PostgreSQL 的LIKEILIKE运算符,通过模式匹配来查询数据。