用 HIVEQL 将电话区号与电话分开

Posted

技术标签:

【中文标题】用 HIVEQL 将电话区号与电话分开【英文标题】:Separate area code from phone with HIVEQL 【发布时间】:2021-08-24 18:14:00 【问题描述】:

我有一张包含 DDD 和电话字段的表格。有些注册正确,有些 ddd 在手机旁边,我需要分开。

我的桌子:

修改表:

我开始学习 HIVEQL,我该如何做出改变?

【问题讨论】:

请描述一下算法,为什么会有多余的00,空行? @leftjoin 00 只是一个演示。我得到一列数字: 55 12 997000000 或 12 997000000 或 null 那些是巴西的ddd代码吗?如果你知道规则,请详细解释它应该如何解析 在某些情况下,该字段带有 Country DDI +55,而在其他情况下,DDI 不带有 【参考方案1】:

使用regexp_extract(str, regex, group_number) 提取 ddd 和电话。演示:

with mytable as (--test data
select stack(3,'5566997000000','5521997000001','24997000011') as str
)

select regexp_extract(str,'^(?:55)?(\\d2)(\\d+)',1) as ddd,
       regexp_extract(str,'^(?:55)?(\\d2)(\\d+)',2) as telefone
from mytable

结果:

ddd telefone
66  997000000
21  997000001
24  997000011

正则表达式'^(?:55)?(\\d2)(\\d+)'含义:

^ - 字符串锚的开始

(?:55)? - 55 个国家代码零次或一次的非捕获组(可选)

(\\d2) - 用两位数捕获组 - ddd

(\\d+) - 捕获 1 位以上数字的组 - 电话

【讨论】:

以上是关于用 HIVEQL 将电话区号与电话分开的主要内容,如果未能解决你的问题,请参考以下文章

将电话号码与地址簿中的确定性匹配

如何设置SIP网络电话?

显示 android 联系人 + 电话号码的最佳做法

怎样使用电脑打电话?发短信??

市场红利下,如何评判一款电话机器人好不好用

用企业微信的公费电话打营销电话会不会封号?