mysql提取手机号_如何使用mysql查询语句从用户手机号中提取纯号码

本文介绍了如何在MySQL中使用replace函数和substring结合case when语句,从不规范的手机号格式中提取出纯数字的11位手机号码,解决了含有特殊字符和'86'前缀的数据处理问题。
摘要由CSDN通过智能技术生成

大家好,我是Dodo团队的shimii

今天和大家分享一下如何使用mysql语句从用户手机号中提取纯号码。

最近工作中需要查询一些用户的手机号,但是数据库中的手机号存在不太规范的情况,数据大概有以下几种格式。

以上都是11位的电话号码几种常见的形式,我们使用mysql语句进行查询:select phone from table where length(phone) = 11。此时的结果为

只有这一种形式的号码数据被成功提取,其他数据就很尴尬地漏掉了。然鹅,由于本人比较懒,不想写提取纯数字的函数,就开始捣鼓各种查询语句。

把mysql数据库中的各种length函数来了一遍,完全没用,长度不是11的仍旧不是11。怎么办呢?

观察了一下电话号码,主要是‘+‘,‘-’,空格以及’86’占了长度,纯数字提不出来,我们可以换向思考,把这些碍事的东西去掉。

Mysql中有replace函数,我们先将空格,’-‘和‘+’用该函数去除。这里有一点需要特别注意,86可能是出现在真实电话号码中的数字,因此不能简单的使用replace(phone,'86 ',''),否则可能会出现九位数的手机号码数据。

由于replace不能一次替换多个内容,故我们采取嵌套方案,语句为:

select phone,replace(replace(replace(phone,'-',''),' ',''),'+','') as phone_change from table;替换后结果如下图。

可以看到,此时电话号码为纯数字了。我们用条件语句(case when)和截断函数(substring)来去掉多余的86,抽取纯手机号。

select phone,

case when

replace(replace(replace(phone,'-',''),' ',''),'+','') like '86%' thensubstring(replace(replace(replace(phone,'-',''),' ',''),'+',''),3)else replace(replace(replace(phone,'-',''),' ',''),'+','') end as change_phone

from table;

至此,所有手机号都已正常。

感谢大家不厌其烦看完我这篇短文,工作中经常遇到这些看似不大却又很麻烦的小问题,“投机取巧”赋予了我寻求快捷解决方法的动力。以后如果又“投机”成功了,我还会把方法和大家共同交流的。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值