在 PostgreSQL 中,LIKE 运算符用于使用通配符将文本值与模式进行匹配,并据此过滤掉数据。如果出现匹配,LIKE 运算符将返回 TRUE。 LIKE 运算符执行区分大小写的搜索。

LIKE 运算符可用于 DML 查询(如 SELECT、INSERT、UPDATE 或 DELETE)的 SELECT 和 WHERE 子句中。

有两个通配符可以与 LIKE 运算符一起使用

  • %代表零个、一个或多个字符或数字。
  • _ 代表一个字符或数字。
  • LIKE 运算符的语法为 <value> LIKE <pattern>

    如果指定匹配,则以上表达式返回 TRUE。

    要获取不匹配的数据,可以使用 NOT LIKE 运算符。语法是 <value> NOT LIKE <pattern> 

    以下示例演示了 LIKE 运算符:

    SELECT
    	'postgre' LIKE 'postgre', -- true
    	'postgre' LIKE 'Postgre', -- false
    	'postgre' LIKE 'post%', -- true
    	'postgre' LIKE '_ostgr_', -- true
    	'postgre' LIKE 'post_'; -- false 

    PostgreSQL LIKE 语句

    在上面的例子中:

  • 第一个表达式返回 true,因为模式"postgre"没有任何通配符,因此 LIKE 运算符的行为类似于等于 (=) 运算符。
  • 第二个表达式返回 false,因为模式"Postgre"不等于值"postgre"。 LIKE 运算符在将值与模式进行比较时会考虑区分大小写。
  • 第三个表达式返回 true,因为它匹配以"post"开头并后跟任意数量的字符或数字的任何字符串。
  • 第四个表达式返回 true,因为模式"_ostgr_"与以单个字符开头、后跟"ostgr"并以单个字符结尾的任何字符串匹配。
  • 第五个表达式返回 false,因为模式 'post_' 只需要一个字符后跟一个 post,这对于值 'postgresql' 来说不是 true。
  • 以下查询将返回名字中包含"ay"字符串的所有员工,例如"May"、"Hayward"等。

    SELECT * FROM Employee WHERE first_name LIKE '%ay%'; 

    这里的模式使用百分比 (%) 和下划线 (_) 两个通配符。以下查询将返回名字中包含任意数量的字符、后跟 'ry' 并以一个字符结尾的所有员工。

    SELECT * FROM Employee WHERE first_name LIKE '%ry_'; 

    PostgreSQL 支持 NOT LIKE 运算符来查找姓名 first_name 中不包含"ay"的员工。

    SELECT * FROM Employee WHERE first_name NOT LIKE '%ay%'; 

    ILIKE运算符

    PostgreSQL 支持 ILIKE 运算符进行不区分大小写的模式匹配。它不是 SQL 标准,而是 PostgreSQL 扩展。

    SELECT
    	'postgre' LIKE 'Postgre', -- false
    	'postgre' ILIKE 'Postgre', -- true
    	'postgre' ILIKE 'POST%', -- true
    	'postgre' ILIKE '_OStgr_'; -- true 

    PostgreSQL LIKE 语句

    在上面的查询中,第一个表达式使用 LIKE 运算符并返回 false,而所有其他表达式都使用执行不区分大小写的搜索的 ILIKE 运算符。请注意,ILIKE 运算符还可以使用一个或多个通配符来搜索字符串。