当前位置: 首页 > news >正文

SQL like 与 正则 区别

SQL 中的LIKE和正则表达式REGEXP或RLIKE都用于模式匹配但它们在表达能力、语法复杂度、性能上有显著区别。核心区别一览表对比维度LIKE正则表达式匹配粒度通配符%、_元字符、量词、字符类等表达能力弱简单模式匹配极强复杂模式、重复、位置、子匹配大小写敏感取决于数据库排序规则通常可配置如REGEXP BINARY通配符%任意多个字符、_单个字符.任意单个字符、*、、?、{n}等字符类支持无支持[0-9]、[a-z]、\d、\w等位置匹配无法匹配行首/行尾仅全串匹配支持^行首、$行尾转义符ESCAPE子句如LIKE 100\% ESCAPE \\如\.匹配点号性能较快简单扫描即可实现较慢需编译、回溯等索引利用前缀abc%可利用索引无法利用普通索引可尝试全文索引标准性SQL 标准核心功能各数据库扩展语法略有差异详细说明与示例1. 基础语法示例MySQL 风格-- 1. LIKE查找以 abc 开头的字符串 SELECT * FROM t WHERE col LIKE abc%; -- 2. 正则查找以 abc 开头的字符串 SELECT * FROM t WHERE col REGEXP ^abc; -- 3. LIKE查找包含 abc 的字符串任意位置 SELECT * FROM t WHERE col LIKE %abc%; -- 4. 正则查找包含 abc 的字符串任意位置 SELECT * FROM t WHERE col REGEXP abc; -- 5. 正则查找数字开头的字符串 SELECT * FROM t WHERE col REGEXP ^[0-9]; -- 或使用预定义字符类 SELECT * FROM t WHERE col REGEXP ^\\d;2. 正则能但 LIKE 做不到的典型场景需求正则表达式LIKE 解决方案通常不可行手机号格式11位数字^1[0-9]{10}$很难实现邮箱格式^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$无法表达至少包含一个数字[0-9]需要LIKE %0% OR LIKE %1% ...匹配3或5个字符^.{3,5}$需要LIKE ___ OR ____ OR _____排除特定模式^(?!abc).*部分数据库不支持零宽断言无法直接实现3. 性能与索引注意事项-- ✅ LIKE 前缀匹配可使用索引B-Tree SELECT * FROM user WHERE name LIKE 张%; -- ❌ LIKE 中缀或后缀匹配无法使用索引 SELECT * FROM user WHERE name LIKE %张%; -- ❌ 正则表达式几乎无法使用普通索引 SELECT * FROM user WHERE name REGEXP ^张; -- 正则优化的可能方案使用全文索引MySQL -- 或者将常用正则条件转换为 LIKE 前缀条件4. 数据库差异说明MySQLREGEXP不区分大小写取决于 collation、RLIKE同义词PostgreSQL~区分大小写、~*不区分大小写、SIMILAR TO混合风格不推荐SQL Server无内置正则需用LIKE或 CLR 扩展SQLiteREGEXP需要加载扩展默认不可用5. 使用建议场景推荐方案简单前缀匹配如搜索框输入LIKE keyword%简单通配符固定长度的占位LIKE _abc_复杂格式验证邮箱、手机号、IP正则表达式或在应用层验证大数据量 前缀匹配务必用LIKE 索引少数几条记录 极复杂的匹配逻辑正则表达式总结能用LIKE解决的问题就不要用正则性能更好、更易读需要复杂模式、字符类、位置匹配时正则是不二之选对性能敏感的场景百万级以上数据优先考虑LIKE前缀匹配 索引或者改用全文搜索工具Elasticsearch、Sphinx 等
http://www.zskr.cn/news/1374796.html

相关文章:

  • uWSGI目录穿越漏洞CVE-2018-7490深度利用与防御
  • C语言基础 内存管理
  • 2026年靠谱的电磁悬挂除铁器/潍坊工业除铁器/潍坊除铁器/永磁自卸除铁器推荐厂家精选 - 品牌宣传支持者
  • 机器学习与强化学习如何赋能黑盒优化:从代理模型到元优化
  • Chiseling算法:交互式假设检验在因果亚组发现中的应用
  • SSH、SNMP、NETCONF、SFTP
  • 深入理解RAG中的嵌入模型Embedding Model
  • 麒麟系统启动卡住别慌!这可能是磁盘文件系统坏了,试试这几条Linux命令自救
  • 室内点云轮廓提取
  • 13.解决 99% 刷机故障!小米 / 华为 / OV / 苹果通用救砖与分区修复教程
  • 机器学习对抗概念漂移:恶意浏览器扩展检测的实战与反思
  • Web3钱包:钱包集成与签名验证
  • 图像数据质量自动化评估与清洗:从CleanVision到自适应阈值实战
  • Android高版本HTTPS抓包终极方案:Magisk+MoveCert证书迁移
  • 渗透测试信息收集四层穿透模型与实战流水线
  • JWT认证深度解析:从签名原理到密钥轮换与灰度升级
  • Outlook与Gmail OAuth 2.0 Proxy 实现原理与工程实践
  • DVWA High文件上传漏洞深度解析与四重绕过实战
  • 元学习驱动AutoML动态搜索空间优化:效率与性能双提升
  • OpenAI RLHF的理解
  • 机器人异常检测实战:基于系统日志的LR、SVM与自编码器模型对比
  • 在Ubuntu 14.04上为老旧系统(如XP)搭建现代Web服务栈:Apache 2.4.59 + OpenSSL 1.1.1w + PHP 8.3.6 保姆级配置指南
  • 在Ubuntu 22.04上,用SSH和HTTPS两种方式搞定OpenHarmony 4.1 Release源码下载(附工具链配置)
  • 机器学习势能面验证:从静态点收敛性到全局拓扑评估
  • Gemini Omni Flash 完整指南:Google AI 视频生成器深度解析
  • 机器学习检测Chrome恶意扩展:概念漂移挑战与开放世界评估
  • 告别SSH连接玄学!用Finalshell管理多台Linux服务器时,如何一劳永逸搞定IP变动?
  • VMware17装CentOS踩过的那些坑:从镜像选择、密码设置到登录失败的完整避雷指南
  • 卷积神经网络在天文图像中自动搜寻双活动星系核的工程实践
  • Java中的接口