ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

hive 分离字符串中的数字&字母

2022-02-16 12:32:07  阅读:219  来源: 互联网

标签:info temp union 字母 hive 字符串 porthive10000query port select


需求

有一个字段还有子母呼和数字,现要将字母和数字进行分离;

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  

 

标签:info,temp,union,字母,hive,字符串,porthive10000query,port,select
来源: https://www.cnblogs.com/wdh01/p/15899933.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有