尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

LIKE 与模式匹配 — 让查询学会“模糊搜索“

LIKE 与模式匹配 — 让查询学会“模糊搜索“
📅 发布时间:2026/7/16 11:08:04

📌 一句话总结

LIKE是 SQL 中做模糊匹配的核心运算符,搭配通配符%(匹配任意长度)和_(匹配单个字符),实现"包含""开头""结尾"等文本搜索场景。


1. 基础语法

SELECT column_list FROM table_name WHERE column_name LIKE pattern;

  • LIKE是区分大小写的(MySQL 默认不区分,取决于 collation)
  • NOT LIKE取反
  • 模式串中写普通字符就匹配该字符

2. 两个通配符

通配符含义示例匹配结果
%匹配任意长度(含 0 个字符)'张%'张三、张无忌、张
_匹配恰好一个字符'张_'张三、张飞(❌ 张、张无忌)

-- 查询所有姓张的员工 SELECT name, email FROM employees WHERE name LIKE '张%'; -- 查询 "张X" 两个字名字的员工 SELECT name FROM employees WHERE name LIKE '张_'; -- 查询邮箱包含 @qq.com SELECT name, email FROM employees WHERE email LIKE '%@qq.com'; -- 查询名字以 "小" 开头的用户 SELECT username FROM users WHERE username LIKE '小%';


3. 结合使用

-- 名字第二个字是 "大":_ 占一个位置 SELECT name FROM employees WHERE name LIKE '_大%'; -- 匹配:张大伟、李大牛(❌ 大声、大壮 因为第一个字缺失) -- 邮箱以 .cn 结尾 SELECT email FROM employees WHERE email LIKE '%.cn'; -- 手机号前 3 位是 138,后 8 位任意(但只查 11 位) SELECT phone FROM users WHERE phone LIKE '138________';


4. 转义通配符

如果要搜索的内容本身包含%或_:

-- 默认方式:用 ESCAPE 指定转义符 SELECT title FROM articles WHERE title LIKE '%100%%' ESCAPE ''; -- 匹配:"促销100%折扣"、"升级100%完成" -- 也可以自定义转义字符 SELECT path FROM files WHERE path LIKE '%/important_%' ESCAPE '/'; -- 此时的 _ 是普通下划线,不是通配符

实际场景:搜索文件名含_的日志、产品型号含%的数据。


5. 数据库方言差异

PostgreSQL:ILIKE + 正则

-- ILIKE:不区分大小写 SELECT name FROM users WHERE name ILIKE 'zhang%'; -- 匹配:Zhang、zhang、ZHANG -- SIMILAR TO:带正则的风格 SELECT name FROM users WHERE name SIMILAR TO '张[三四五]%'; -- 匹配:张三丰、张四海(正则风格的模式匹配) -- 正则表达式 ~ / ~*(PostgreSQL 独有利器) SELECT name FROM users WHERE name ~ '^张[^\s]{1,2}$'; -- 匹配:张飞、张三(2-3字,姓张) -- ~ 区分大小写,~* 不区分,!~ 取反

MySQL:默认不区分大小写

MySQL 的LIKE默认不区分大小写(取决于表和字段的 collation 设置)。 如果需要区分大小写,用LIKE BINARY:

SELECT name FROM users WHERE name LIKE BINARY 'Zhang%'; -- 只匹配大写 Z,不匹配 zhang

SQLite:简单的 LIKE

SQLite 的LIKE默认不区分 ASCII 字母大小写,且不支持ILIKE或正则。


6. 性能问题(重要 ⚠️)

-- ❌ 以 % 开头的 LIKE 不能走索引 SELECT * FROM logs WHERE message LIKE '%ERROR%'; -- 全表扫描! -- ✅ 前缀匹配可以走索引 SELECT * FROM logs WHERE message LIKE 'ERROR:%'; -- 利用 B-Tree 索引快速查找 -- ✅ 尾部模糊也能走索引 SELECT * FROM logs WHERE message LIKE '2024-01-%';

为什么?

B-Tree 索引是按字典序排列的,LIKE 'ABC%'等价于查['ABC', 'ABD')区间,索引可以快速定位。 但LIKE '%ABC'不知道前面是什么,必须扫描所有行。

替代方案

场景推荐方案
前缀模糊搜索LIKE 'xxx%'+ 索引 ✅
全文搜索(大量文本)数据库全文索引(MySQL FULLTEXT / PostgreSQL GIN)
搜索引擎级别Elasticsearch / Meilisearch
任意位置匹配PostgreSQL 的pg_trgm三元组索引
少量数据直接LIKE '%text%'无所谓

7. 实战案例

案例 1:用户搜索

-- 搜索框:输入 "张三" SELECT user_id, username, email, phone FROM users WHERE username LIKE CONCAT('%', '张三', '%') OR email LIKE '%张三%'; -- ⚠️ 实际产品中应加 LIMIT,防全表爆炸

案例 2:清理含特殊字符的数据

-- 找出用户名带下划线的用户(确认下划线是普通字符而非通配符) SELECT username FROM users WHERE username LIKE '%/_%' ESCAPE '/';

案例 3:日志按模式分类

-- PostgreSQL:用正则提取日志类别 SELECT log_entry, CASE WHEN log_entry ~* 'error|fatal|critical' THEN '严重' WHEN log_entry ~* 'warn' THEN '警告' WHEN log_entry ~* 'info|debug' THEN '信息' ELSE '其他' END AS level FROM system_logs WHERE log_entry ~ '2024-01-1[5-9]'; -- 1月15-19日的日志


📝 要点总结

概念要点
%匹配 0 到任意个字符
_匹配恰好 1 个字符
LIKE区分大小写看数据库/配置
ILIKEPG 专属,不区分大小写
正则~PG 专属,强大灵活
转义ESCAPE ''或自定义字符
性能前缀 % 放在后面才能走索引!
全文搜索大数据量别用 LIKE,上全文索引或 ES

相关新闻

  • YOLOv12在输电线路智能检测中的工程实践
  • Elsevier投稿追踪插件:学术作者必备的智能审稿监控工具
  • Windows 2000注册表架构解析与优化指南

最新新闻

  • 南阳本地商家流量突围:生成式引擎GEO优化如何提升AI搜索可见性 - GrowthUME
  • H桥电路原理与电机控制实践指南
  • FreeRTOS系列|从零搭建STM32CubeMX+Keil MDK-ARM开发环境
  • Vibe Coding与Trae:以开发者状态为核心的新型编码范式
  • 从0到1掌握Raven:新手必备的CI/CD安全扫描命令参考手册 [特殊字符]
  • 2026鄂州黄金回收防坑指南:3家正规实体店实测推荐 - 观金堂黄金回收

日新闻

  • Toon Boom Harmony 高效工作流:从节点视图到镜头标记的实战技巧
  • 真力时售后维修电话,为您提供专业腕表保养与故障修复服务权威公示(2026年7月最新) - 亨得利官方服务中心
  • 【C++】类和对象--构造函数进阶(初始化列表与explicit)

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号