sql数据处理,使用正则匹配、去重手机号

# 去除两端口空格
trim("字段名")

正则匹配手机号

 select dh regexp '/^(((\d{3,4}-)?[0-9]{7,8})|(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8})$/'
--正则匹配手机号
select trim(aa.dh) rlike '(^[0-9]{3}-[0-9]{8}$)|(^[0-9]{4}-[0-9]{7,8}$)|^[0-9]{7,8}$|^[0-9]{11}$'
--获取前四个字符
substr(trim(aa.mobile),0,4)
--字符串拼接
concat(substr(trim(aa.mobile),0,4),'-',substr(trim(aa.mobile), 5)
--字符串长度判断
length(trim(aa.dh)) < 15 
--字符串替换
regexp_replace("字段名",'\\#|\\|\\*| |\\√|\\.|\\&|\\|\\+|\\(|\\)|','')
--查询字符串是否含字符,大于0说明包含。
locate("0513", cast(aa.dh as string)) > 0,

手机号去重,典型案例
方式一:

select 
if(regexp_replace(trim(aa.dh),'\\#|\\|\\*| |\\√|\\.|\\&|\\|\\+|\\(|\\)|','') rlike '(^[0-9]{3}-[0-9]{8}$)|(^[0-9]{4}-[0-9]{7,8}$)|^[0-9]{7,8}$|^[0-9]{11}$',regexp_replace(trim(aa.dh),'\\#|\\|\\*|\\√| |\\.|\\&|\\|',''),null) as sj
end as mobile
from table_name as aa limit 10000

方式二:

select 
case 
when length(trim(aa.mobile)) < 5 then null 
when trim(aa.mobile) rlike '(^[0]{11}.*?$)|(^[1]{11}.*?$)|(^[2]{11}.*?$)|(^[3]{11}.*?$)|(^[4]{11}.*?$)|(^[5]{11}.*?$)|(^[6]{11}.*?$)|(^[7]{11}.*?$)|(^[8]{11}.*?$)|(^[9]{11}.*?$)' then null
when  trim(aa.mobile) rlike '(^[0-9]{12}$)' then concat(substr(trim(aa.mobile),0,4),'-',substr(trim(aa.mobile), 5))
else if(regexp_replace(trim(aa.mobile),'\\#|\\|\\*| |\\√|\\.|\\&|\\|\\+|\\(|\\)|','') rlike '(^[0-9]{3}-[0-9]{8}$)|(^[0-9]{4}-[0-9]{7,8}$)|^[0-9]{7,8}$|^[0-9]{11}$',regexp_replace(trim(aa.mobile),'\\#|\\|\\*|\\√| |\\.|\\&|\\|',''),null) 
end as mobile
from table_name as aa limit 10000



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值