如何用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
相关产品推荐
相关产品推荐

