You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用REGEXP_SUBSTR编写SQL查询筛选手机号第5位为5的联系人

解决手机号第5位为'5'的联系人查询问题

嘿,我来帮你搞定这个SQL查询的问题!你想用REGEXP_SUBSTR()函数来筛选手机号第5位是'5'的联系人,咱们先纠正下你原来代码里的小误区,再给出正确的写法:

正确的SQL查询(使用REGEXP_SUBSTR)

SELECT first_name, city, state, phone_number
FROM contact
WHERE REGEXP_SUBSTR(phone_number, '^[0-9]{4}([0-9])', 1, 1, '', 1) = '5'
ORDER BY first_name ASC;

代码参数拆解

这里REGEXP_SUBSTR()的参数咱们逐个理清楚:

  • phone_number:要处理的源字段(你的手机号列)
  • '^[0-9]{4}([0-9])':正则表达式,^[0-9]{4}匹配手机号开头的4位数字,([0-9])把第5位数字单独捕获为第1个分组
  • 1:从字符串的第1个字符开始匹配
  • 1:取第1次匹配的结果(确保只提取一次第5位)
  • '':匹配模式为空(如果你的数据库支持大小写敏感、多行匹配等模式,可以在这里指定)
  • 1:提取第1个捕获组的内容(也就是咱们要验证的第5位数字)

通过这个方式提取出手机号的第5位,再判断它等于'5',就能精准筛选出符合条件的联系人,最后按first_name升序排列就完成需求啦。

补充:更简洁的正则匹配方案

如果你的数据库支持REGEXP_LIKE()函数,也可以直接用正则匹配整个手机号,写法更直观:

SELECT first_name, city, state, phone_number
FROM contact
WHERE REGEXP_LIKE(phone_number, '^[0-9]{4}5[0-9]*$')
ORDER BY first_name ASC;

这个正则的逻辑是:手机号开头是4位数字,第5位固定为'5',后面可以跟着任意数量的数字(适配不同长度的手机号格式)。

内容的提问来源于stack exchange,提问作者user1627288

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:17:59