用 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 将电话区号与电话分开的主要内容,如果未能解决你的问题,请参考以下文章