hive 分离字符串中的数字&字母
需求
有一个字段有字母和数字组成,现要将字母和数字进行分离;
portyarn8088manager
porthdfs9820filse
porthive10000query
要求输出结果
portyarn8088manager portyarnmanager 8088 porthdfs9820filse porthdfsfilse 9820 porthive10000query porthivequery 10000
select 'porthdfs9820filse' port_info union select 'porthive10000query' port_info union select 'portyarn8088manager' port_info
思路
解题在于把不同字符和数字替换成一个指定的特征字符,这样可以将一个字符就替换所有的字符,一个特征数字就可以代表所有的数字,在删除数据的时候,无需逐一查找多个字符或多个数字了。
1、将特征字段替换成指定字符
select port_info, translate(lower(port_info), 'abcdefghijklmnopqrstuvwxyz', repeat('#', 26)) temp_info_1, translate(lower(port_info), '0123456789', repeat('&', 10)) temp_info_2 from (select 'porthdfs9820filse' port_info union select 'porthive10000query' port_info union select 'portyarn8088manager' port_info) t;.
结果如下
porthdfs9820filse ########9820##### porthdfs&&&&filse porthive10000query ########10000##### porthive&&&&&query portyarn8088manager ########8088####### portyarn&&&&manager
2、通过正则,将特定字符删除
select port_info, regexp_replace(temp_info_2, '\\&', '') alb, regexp_replace(temp_info_1, '\\#', '') zm from (select port_info, translate(lower(port_info), 'abcdefghijklmnopqrstuvwxyz', repeat('#', 26)) temp_info_1, translate(lower(port_info), '0123456789', repeat('&', 10)) temp_info_2 from (select 'porthdfs9820' port_info union select 'porthive10000' port_info union select 'portyarn8088' port_info) t) t;
结果
porthdfs9820 porthdfs 9820 porthive10000 porthive 10000 portyarn8088 portyarn 8088
分类:
HIve
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示