在 PostgreSQL 中使用 LIKE

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 【8月更文挑战第12天】

在 PostgreSQL 中,LIKE 是用于执行模式匹配的操作符,常用于根据部分字符串匹配查询数据。它提供了对字符串的灵活搜索功能,可以帮助你找到符合特定模式的记录。本文将详细介绍 PostgreSQL 中 LIKE 操作符的使用,包括基本语法、通配符的使用、实际示例以及一些高级应用技巧。

一、LIKE 操作符的定义

LIKE 是 SQL 标准中的一种操作符,用于在 WHERE 子句中进行字符串模式匹配。它允许你使用通配符来匹配特定的字符模式,从而筛选符合条件的记录。

二、基本语法

LIKE 操作符的基本语法如下:

SELECT column_name
FROM table_name
WHERE column_name LIKE pattern;
  • column_name:要进行模式匹配的列。
  • table_name:包含数据的表。
  • pattern:用于匹配的字符串模式,通常包含通配符。

三、通配符的使用

LIKE 操作符中,常用的通配符有两种:

  1. 百分号(%)

    百分号表示零个或多个字符。例如:

    SELECT first_name
    FROM employees
    WHERE first_name LIKE 'J%';
    

    这个查询返回 first_name 以字母 'J' 开头的所有记录。

  2. 下划线(_)

    下划线表示一个字符。例如:

    SELECT first_name
    FROM employees
    WHERE first_name LIKE '_ohn';
    

    这个查询返回 first_name 中第四个字符为 'o' 和第五个字符为 'n' 的所有记录,例如 "John" 和 "Mohn"。

四、实际示例

  1. 匹配特定模式

    假设你有一个 products 表,包含 product_name 列。你可以使用 LIKE 查找包含特定子字符串的记录。例如:

    SELECT product_name
    FROM products
    WHERE product_name LIKE '%Laptop%';
    

    这个查询返回 product_name 中包含 "Laptop" 的所有记录,例如 "Gaming Laptop" 和 "Laptop Stand"。

  2. 模糊匹配

    你可以使用 LIKE 执行更灵活的模糊匹配。例如:

    SELECT product_name
    FROM products
    WHERE product_name LIKE 'A_%';
    

    这个查询返回 product_name 中以字母 'A' 开头并且第二个字符是任何单个字符的记录,例如 "Apple" 和 "Air Conditioner"。

  3. 匹配多个模式

    你可以使用 OR 结合多个 LIKE 模式。例如:

    SELECT product_name
    FROM products
    WHERE product_name LIKE 'A%' OR product_name LIKE '%Pro%';
    

    这个查询返回 product_name 中以 'A' 开头或包含 "Pro" 的所有记录,例如 "Apple Pro" 和 "Android Tablet"。

五、大小写敏感和不敏感

LIKE 操作符在 PostgreSQL 中默认是大小写敏感的。如果你需要执行不区分大小写的匹配,可以使用 ILIKE 操作符,它的使用方法与 LIKE 相同。例如:

SELECT product_name
FROM products
WHERE product_name ILIKE '%laptop%';

这个查询将返回所有包含 "laptop" 的记录,无论大小写如何,例如 "Laptop" 和 "LAPTOP".

六、使用转义字符

LIKE 模式中,如果你需要匹配通配符字符(如 %_),可以使用转义字符。例如,如果你想匹配包含实际的百分号字符,可以使用转义字符:

SELECT product_name
FROM products
WHERE product_name LIKE '%50\%%' ESCAPE '\';

在这个查询中,\ 是转义字符,\% 匹配实际的百分号字符。

七、性能优化

LIKE 查询的性能可能受到模式的复杂性和数据量的影响。为了优化性能,可以考虑以下方法:

  1. 避免在模式的开头使用百分号

    使用前导百分号(例如 %term)会导致全表扫描,影响性能。如果可能,将模式限制在开始位置,例如 term%

  2. 创建索引

    如果对 LIKE 查询进行优化,考虑在相关列上创建 GINGiST 索引。例如:

    CREATE INDEX idx_product_name ON products USING gin (product_name gin_trgm_ops);
    

    这将创建一个支持 LIKE 查询的索引,提高性能。

  3. 使用 pg_trgm 扩展

    PostgreSQL 提供了 pg_trgm 扩展,用于加速类似于 LIKE 的查询。你可以通过安装并使用此扩展来优化性能:

    CREATE EXTENSION pg_trgm;
    

    然后可以创建基于 trigram 的索引来提高查询效率。

八、总结

在 PostgreSQL 中,LIKE 操作符是一个强大的工具,用于执行字符串模式匹配。通过使用通配符、模糊匹配和大小写不敏感的 ILIKE 操作符,你可以灵活地搜索和筛选数据。了解如何使用 LIKE 操作符及其优化技巧,可以帮助你提高查询效率和代码的可读性。掌握这些技巧,将使你能够更有效地处理和分析数据库中的字符串数据。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
5月前
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
84 7
|
5月前
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能【1月更文挑战第13天】【1月更文挑战第65篇】
62 2
|
5月前
|
SQL 关系型数据库 PostgreSQL
PostgreSQL【SQL 01】根据条件更新字段值或追加信息STRPOS(string, substring)函数使用及LIKE函数对比
PostgreSQL【SQL 01】根据条件更新字段值或追加信息STRPOS(string, substring)函数使用及LIKE函数对比
145 0
|
SQL 存储 关系型数据库
PostgreSQL 动态表复制(CREATE TABLE AS & CREATE TABLE LIKE)
PostgreSQL 动态表复制(CREATE TABLE AS & CREATE TABLE LIKE)
|
存储 SQL 关系型数据库
PostgreSQL Like查询与正则表达式
PostgreSQL Like查询与正则表达式
259 0
|
SQL 自然语言处理 搜索推荐
【重新发现PostgreSQL之美】- 16 like '%西出函谷关%' 模糊查询
大家好,这里是重新发现PostgreSQL之美 - 16 like '%西出函谷关%' 模糊查询
|
SQL Oracle 关系型数据库
PostgreSQL Oracle兼容性之 - psql prompt like Oracle SQL*Plus
Oracle的SQL*Plus客户端支持使用promote输入变量值,然后在脚本的其他位置使用该变量值。例如大量的dbms脚本使用了这个用法, 如statspack输入起始值。https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch1203.
2522 0
|
关系型数据库
|
关系型数据库 PostgreSQL Python