如何在Presto中提取列中"+"与"@"之间的字符串?
在Presto中提取目标手机号的解决方案
你可以使用Presto的regexp_extract函数结合正则表达式,精准提取+之后的连续数字序列,完美匹配你的需求:
实现SQL
SELECT regexp_extract(PHONE_NUMBER, '\\+(\\d+)', 1) AS PHONE_NUMBER FROM your_table_name;
原理说明
regexp_extract函数用于从字符串中提取符合正则表达式匹配的部分- 正则表达式
\\+(\\d+)的含义:\\+:匹配字符串中的+符号(因+是正则特殊字符,需转义)(\\d+):捕获+之后的连续数字序列(\\d匹配单个数字,+表示匹配1个或多个连续数字)
- 参数
1指定提取第一个捕获组的内容,也就是我们需要的纯数字手机号
测试验证
针对你的输入数据:
ppa:+77845678021@abc.gbc443.gbc356.7kffooopppp.deu→ 提取出77845678021tel:+77695002395→ 提取出77695002395dadsadas+884415002996xx2→ 提取出884415002996
完全符合你的期望输出。
如果需要处理不含+的行(避免返回null),可以用coalesce函数设置默认值:
SELECT coalesce(regexp_extract(PHONE_NUMBER, '\\+(\\d+)', 1), '') AS PHONE_NUMBER FROM your_table_name;
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

