# 去除两端口空格
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