上一篇
场景还原:
凌晨3点,程序员小张盯着满屏的用户留言抓狂——老板要他在10分钟内统计所有含"惊喜价!"或"限时¥199"的订单备注,但这些关键词可能藏在文本任意位置,还可能被写成"惊喜 价"或"限时199元"... 😱
别慌!今天我们就用MySQL的REGEXP
正则表达式,教你像老司机一样优雅处理这种"花式匹配"需求!
-- 简单匹配:找出包含"惊喜"的记录 SELECT * FROM orders WHERE note REGEXP '惊喜'; -- 区分大小写匹配(MySQL 8.0+) SELECT * FROM products WHERE name REGEXP BINARY 'iPhone';
💡 小技巧:在MySQL中默认不区分大小写,加BINARY
秒变严格模式!
-- 匹配"惊喜价"或"限时优惠" SELECT * FROM orders WHERE note REGEXP '惊喜价|限时优惠';
-- 匹配"惊喜"后跟任意1个字符(如"惊喜!"、"惊喜价") SELECT * FROM comments WHERE content REGEXP '惊喜.'; -- 匹配"199元"、"199元起"等(.*表示任意字符任意次数) SELECT * FROM promotions WHERE title REGEXP '199元.*';
-- 以"VIP"开头的用户名 SELECT * FROM users WHERE username REGEXP '^VIP'; -- 以".com"结尾的邮箱 SELECT * FROM contacts WHERE email REGEXP '\\.com$'; -- 注意转义点号
SELECT message, REGEXP_SUBSTR(message, '1[3-9][0-9]{9}') AS phone_number FROM customer_messages WHERE message REGEXP '1[3-9][0-9]{9}';
-- 找出非法的日期格式(要求YYYY-MM-DD) SELECT * FROM events WHERE date_str NOT REGEXP '^[0-9]{4}-[0-9]{2}-[0-9]{2}$';
-- 查找含"紧急"且后面跟着2-3位数字的工单 SELECT * FROM tickets WHERE content REGEXP '紧急[0-9]{2,3}';
LIKE
,能用就别用正则 \\.
而不是 REGEXP_REPLACE
等高级函数 :正则表达式就像SQL里的瑞士军刀🗡️,用好了能轻松解决各种"这个需求有点怪"的场景,下次再遇到老板的变态过滤需求,记得淡定回一句:"加个REGEXP就行~"
(本文基于MySQL 8.0功能验证,2025-08数据环境测试通过)
本文由 归嘉良 于2025-08-02发表在【云服务器提供商】,文中图片由(归嘉良)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/514629.html
发表评论