首页 > 解决方案 > Hive 从字符串中提取数值

问题描述

我有一张桌子:

column1                         column2 
The first value is 200 gb        need to restart (2 times)
The 2nd value is 700 gb          need (optional) to restart (10 times)

我正在尝试从表中获取数值。预期的输出是

column1_numeric      column2_numeric 
200                   2
700                   10

对于 column1:我尝试使用以下方法获取数据:regexp_replace(column1, '[^0-9]', '') as column1_numeric; 但这不适用于第二行并返回 2700

对于column2:我正在尝试:regexp_replace(regexp_extract(column2,'\\((.*?)\\)'), '[^0-9]', '') as column2_numeric 但这也不适用于第二行并返回空值

请问有什么建议吗?

标签: regexstringhivehiveqlnumeric

解决方案


从字符串中提取最后一个数值'(\\d+)([^0-9]*)$'

select 
      regexp_extract(column1,'(\\d+)([^0-9]*)$',1) as column1_numeric,
      regexp_extract(column2,'(\\d+)([^0-9]*)$',1) as column2_numeric
   ...

它提取

column1_numeric      column2_numeric 
200                   2
700                   10

您也可以使用短一点的代替[^0-9](不是数字) :\\D

'(\\d+)(\\D*)$'

推荐阅读