PostgreSQL LIKE 运算符用法与实例

本文介绍了在 PostgreSQL 中如何使用 LIKE 运算符检查一个文本是否与指定的模式匹配。

在 PostgreSQL 中,LIKE 运算符是一个布尔运算符,用来检查一个文本是否与指定的模式匹配。如果文本与指定的模式匹配,则 LIKE 运算符返回真,否则它返回假。

ILIKE 运算符是 LIKE 运算符的不区分大小写版本,ILIKE 运算符执行不区分大小写的匹配。

PostgreSQL LIKE 语法

LIKE 运算符是一个双目比较运算符,需要两个操作数。 LIKE 运算符语法如下:

expr LIKE pattern
expr ILIKE pattern

说明:

  • expr 可以是一个字段名、值或其他的表达式(比如函数调用、运算等)。 expr 应该是文本。

  • pattern 是一个字符串模式。它支持两个通配符: %_

    • % 匹配零或多个任意字符。

    • _ 匹配单个任意字符。

    • 如果需要匹配通配符,则需要使用 \ 转义字符,如 \%\_

    • 比如:

      • a% 匹配以字符 a 开头的任意长度的字符串。
      • %a 匹配以字符 a 结尾的任意长度的字符串。
      • %a% 匹配包含字符 a 的任意长度的字符串。
      • %a%b% 匹配同时包含字符 abab 前面的任意长度的字符串。
      • a_ 匹配以字符 a 开头长度为 2 字符串。
      • _a 匹配以字符 a 结尾长度为 2 字符串。

如果 exprpattern 匹配,LIKE 运算符返回真,否则返回假。

NOT LIKELIKE 运算符的否定操作。

NOT ILIKEILIKE 运算符的否定操作。

PostgreSQL LIKE 运算规则

PostgreSQL LIKE 运算符用于检测一个文本是否指定的模式匹配。它的运算规则如下:

  • LIKE 运算符左侧的操作数与右侧的模式匹配时,返回 t。否则,返回 f

    SELECT
        'a' LIKE 'a'   "'a' LIKE 'a'",
        'a' LIKE 'a%'  "'a' LIKE 'a%'",
        'ab' LIKE 'a%' "'ab' LIKE 'a%'",
        'ab' LIKE '%a' "'ab' LIKE '%a'";
    
     'a' LIKE 'a' | 'a' LIKE 'a%' | 'ab' LIKE 'a%' | 'ab' LIKE '%a'
    --------------+---------------+----------------+----------------
     t            | t             | t              | f
    SELECT
        'a' LIKE 'a_'   "'a' LIKE 'a_'",
        'ab' LIKE 'a_'  "'ab' LIKE 'a_'",
        'abc' LIKE 'a_' "'abc' LIKE 'a_'";
    
     'a' LIKE 'a_' | 'ab' LIKE 'a_' | 'abc' LIKE 'a_'
    ---------------+----------------+-----------------
     f             | t              | f
  • 如果 LIKE 运算符的两个操作数中任意一个为 NULL 时,返回 NULL

    SELECT
        NULL LIKE 'a%' "NULL LIKE 'a%'",
        'a' LIKE NULL  "'a' LIKE NULL ";
    
     NULL LIKE 'a%' | 'a' LIKE NULL
    ----------------+----------------
     <null>         | <null>

PostgreSQL LIKE 实例

我们将使用 Sakila 示例数据库 中的表进行演示,请您先在 PostgreSQL 中安装 Sakila 示例数据库

在以下实例中,我们使用 Sakila 示例数据库中的 actor 表和 category 表作为演示。

使用 LIKE 匹配以某些字符开头的文本

要从 actor 表中查找名字以字符 P 开头的所有演员,请使用以下带有 LIKE 运算符的语句:

SELECT *
FROM actor
WHERE first_name LIKE 'P%';
 actor_id | first_name | last_name |     last_update
----------+------------+-----------+---------------------
        1 | PENELOPE   | GUINESS   | 2006-02-15 04:34:33
       46 | PARKER     | GOLDBERG  | 2006-02-15 04:34:33
       54 | PENELOPE   | PINKETT   | 2006-02-15 04:34:33
      104 | PENELOPE   | CRONYN    | 2006-02-15 04:34:33
      120 | PENELOPE   | MONROE    | 2006-02-15 04:34:33
(5 rows)

这里, P% 模式表示以 P 开头的任意长度的文本。为了找到名字以字符 P 开头的所有演员,我们使用了表达式 first_name LIKE 'P%'

first_name LIKE 'P%' 用来匹配以大写字母 P 开头的文本,如果您还想要匹配以小写字母 P 开头的文本,first_name ILIKE 'P%'

使用 LIKE 匹配以某个字符结尾的文本

要从 actor 表中查找名字以字符 ES 结尾的所有演员,请使用以下带有 LIKE 运算符的语句:

SELECT *
FROM actor
WHERE first_name LIKE '%ES';
 actor_id | first_name | last_name |     last_update
----------+------------+-----------+---------------------
       48 | FRANCES    | DAY-LEWIS | 2006-02-15 04:34:33
       84 | JAMES      | PITT      | 2006-02-15 04:34:33
      126 | FRANCES    | TOMEI     | 2006-02-15 04:34:33
(3 rows)

使用 LIKE 匹配包含某些字符开头的文本

要从 actor 表中查找名字中带有字符串 AM 的所有演员,请使用以下带有 LIKE 运算符匹配的语句:

SELECT * FROM actor WHERE first_name LIKE '%AM%';
 actor_id | first_name | last_name |     last_update
----------+------------+-----------+---------------------
       24 | CAMERON    | STREEP    | 2006-02-15 04:34:33
       63 | CAMERON    | WRAY      | 2006-02-15 04:34:33
       71 | ADAM       | GRANT     | 2006-02-15 04:34:33
       84 | JAMES      | PITT      | 2006-02-15 04:34:33
      111 | CAMERON    | ZELLWEGER | 2006-02-15 04:34:33
      132 | ADAM       | HOPPER    | 2006-02-15 04:34:33
      175 | WILLIAM    | HACKMAN   | 2006-02-15 04:34:33
(7 rows)

使用 LIKE 匹配单个字符

通配符 _ 匹配任意单个字符。以下 SQL 语句使用 LIKE 运算符查找 first_name 以字符串 AY 结尾的且长度为 3 个字符的所有演员。

SELECT * FROM actor WHERE first_name LIKE '_AY';
 actor_id | first_name | last_name |     last_update
----------+------------+-----------+---------------------
       55 | FAY        | KILMER    | 2006-02-15 04:34:33
       64 | RAY        | JOHANSSON | 2006-02-15 04:34:33
      147 | FAY        | WINSLET   | 2006-02-15 04:34:33
      156 | FAY        | WOOD      | 2006-02-15 04:34:33
(4 rows)

结论

PostgreSQL LIKE 运算符是一个布尔运算符,用来检查一个文本是否与指定的模式匹配。如果文本与指定的模式匹配,则 LIKE 运算符返回真,否则它返回假。

ILIKE 运算符是 LIKE 运算符的不区分大小写版本,ILIKE 运算符执行不区分大小写的匹配。