MySQL正则查询电话号码字段并提取匹配内容的实现需求
解决方法:提取正则匹配的手机号片段
没问题,这个需求用MySQL的REGEXP_SUBSTR函数就能轻松实现,单条查询搞定,完全不需要额外的分组键。
核心思路
你的原查询已经通过REGEXP过滤出了包含目标手机号片段的记录,现在只需要在SELECT子句中用REGEXP_SUBSTR函数,从phone字段里提取出匹配到的具体片段即可。这个函数会自动找到每条记录中第一个符合正则规则的子串,完美对应你要提取的123456或565834。
最终SQL语句
SELECT name, REGEXP_SUBSTR(phone, '123456|565834') AS `Matched`, phone AS `Phone` FROM customers WHERE phone REGEXP '123456|565834';
效果验证
这条语句会输出你需要的格式:
| Name | Matched | Phone |
|---|---|---|
| Naveen | 123456 | 12345678 |
| Naveen2 | 123456 | 123456789 |
| Arun | 565834 | 9565834 |
| Arun2 | 565834 | 10565834 |
每条记录都会独立处理,自动提取对应的匹配片段,不需要依赖任何额外的唯一分组键,完全满足你的要求。
兼容旧版本MySQL(低于8.0)
如果你的MySQL版本不支持REGEXP_SUBSTR,可以用SUBSTRING结合LOCATE的方式替代,语句如下:
SELECT name, CASE WHEN LOCATE('123456', phone) > 0 THEN '123456' WHEN LOCATE('565834', phone) > 0 THEN '565834' END AS `Matched`, phone AS `Phone` FROM customers WHERE phone REGEXP '123456|565834';
内容的提问来源于stack exchange,提问作者NavyCody
相关产品推荐
相关产品推荐

