类别:

字符串和二进制函数 (匹配/比较)

[ NOT ] LIKE

执行区分大小写的比较,以确定字符串是否与指定的模式匹配。对于不区分大小写的匹配,请改为使用 ILIKE。

LIKE、ILIKE 和 RLIKE 都执行类似的操作;但是,RLIKE 使用 POSIX ERE(扩展正则表达式)语法,而不是 LIKE 和 ILIKE 所使用的 SQL 模式语法。

小技巧

您可以使用搜索优化服务,提高用于调用此函数的查询的性能。有关详细信息,请参阅 搜索优化服务

另请参阅:

[ NOT ] ILIKE[ NOT ] RLIKELIKE ALLLIKE ANY

语法

<subject> [ NOT ] LIKE <pattern> [ ESCAPE <escape> ]

LIKE( <subject> , <pattern> [ , <escape> ] )
Copy

实参

必填:

subject

以匹配为准。这通常是一个 VARCHAR,但也可以使用一些其他数据类型。

pattern

要匹配的模式。这通常是一个 VARCHAR,但也可以使用一些其他数据类型。

可选:

escape

插入通配符前面的字符,以指示通配符应解释为常规字符,而不是通配符。

返回

返回 BOOLEAN 或 NULL。

  • 指定 LIKE 时,如果存在匹配项,则值为 TRUE。否则返回 FALSE。

  • 指定 NOT LIKE 时,如果没有匹配项,则值为 TRUE。否则返回 FALSE。

  • 当指定 LIKE 或 NOT LIKE 时,如果任何实参为 NULL,则返回 NULL。

使用说明

  • 要在模式匹配中包含单引号或其他特殊字符,可以使用 反斜杠转义序列

  • NULL 与 NULL 不匹配。换句话说,如果主体为 NULL,模式为 NULL,则不被视为匹配。

  • pattern 支持 SQL 通配符:

    • 下划线 (_) 匹配任意单个字符。

    • 百分号 (%) 匹配任何包含零个或多个字符的序列。

  • 作为匹配项,pattern 中的通配符包括 subject 中的换行符 (n)。

  • 模式匹配涵盖整个字符串。要匹配字符串中任意位置的序列,请以 % 开始和结束模式。

  • 没有默认的转义字符。

  • 如果使用反斜杠作为转义字符,则必须在表达式和 ESCAPE 子句中对反斜杠进行转义。例如,以下命令指定转义字符是反斜杠,然后使用该转义字符搜索 % 作为字面量(如果没有转义字符,% 将被视为通配符):

    'SOMETHING%' LIKE '%\\%%' ESCAPE '\\';
    
    Copy

    有关使用转义字符的示例,特别是将反斜杠用作转义字符的示例,请参阅 示例

排序规则详细信息

仅支持 upperlowertrim 排序规则规范。还支持与 upperlowertrim 的组合(例如 upper-trimlower-trim),但区域组合(例如 en-upper)除外。

示例

创建一个包含一些字符串的表:

CREATE OR REPLACE TABLE like_ex(name VARCHAR(20));
INSERT INTO like_ex VALUES
  ('John  Dddoe'),
  ('John \'alias\' Doe'),
  ('Joe   Doe'),
  ('John_down'),
  ('Joe down'),
  ('Elaine'),
  (''),    -- empty string
  (null);
Copy

以下示例展示了 LIKENOT LIKE 及通配符 % 的用法:

SELECT name
  FROM like_ex
  WHERE name LIKE '%Jo%oe%'
  ORDER BY name;
Copy
+------------------+
| NAME             |
|------------------|
| Joe   Doe        |
| John  Dddoe      |
| John 'alias' Doe |
+------------------+
SELECT name
  FROM like_ex
  WHERE name NOT LIKE '%Jo%oe%'
  ORDER BY name;
Copy
+-----------+
| NAME      |
|-----------|
|           |
| Elaine    |
| Joe down  |
| John_down |
+-----------+
SELECT name
  FROM like_ex
  WHERE name NOT LIKE 'John%'
  ORDER BY name;
Copy
+-----------+                                                                   
| NAME      |
|-----------|
|           |
| Elaine    |
| Joe   Doe |
| Joe down  |
+-----------+
SELECT name
  FROM like_ex
  WHERE name NOT LIKE ''
  ORDER BY name;
Copy
+------------------+
| NAME             |
|------------------|
| Elaine           |
| Joe   Doe        |
| Joe down         |
| John  Dddoe      |
| John 'alias' Doe |
| John_down        |
+------------------+

以下示例使用反斜杠对单引号进行转义,以便可以在模式匹配中找到该引号:

SELECT name
  FROM like_ex
  WHERE name LIKE '%\'%'
  ORDER BY name;
Copy
+------------------+
| NAME             |
|------------------|
| John 'alias' Doe |
+------------------+

以下示例使用 ESCAPE 子句:

SELECT name
  FROM like_ex
  WHERE name LIKE '%J%h%^_do%' ESCAPE '^'
  ORDER BY name;
Copy
+-----------+                                                                   
| NAME      |
|-----------|
| John_down |
+-----------+

like_ex 表中插入更多行:

INSERT INTO like_ex (name) VALUES 
  ('100 times'),
  ('1000 times'),
  ('100%');
Copy

如果没有转义字符,则将百分号(%)视为通配符:

SELECT * FROM like_ex WHERE name LIKE '100%'
  ORDER BY 1;
Copy
+------------+                                                                  
| NAME       |
|------------|
| 100 times  |
| 100%       |
| 1000 times |
+------------+

使用转义字符时,百分号(%)被视为字面量:

SELECT * FROM like_ex WHERE name LIKE '100^%' ESCAPE '^'
  ORDER BY 1;
Copy
+------+                                                                        
| NAME |
|------|
| 100% |
+------+

以下示例使用将反斜杠用作转义字符的 ESCAPE 子句。请注意,在 ESCAPE 子句和表达式中都必须对反斜杠本身进行转义:

SELECT * FROM like_ex WHERE name LIKE '100\\%' ESCAPE '\\'
  ORDER BY 1;
Copy
+------+                                                                        
| NAME |
|------|
| 100% |
+------+
语言: 中文