hive从字符串中提取数值

holgip5t  于 2021-06-24  发布在  Hive
关注(0)|答案(3)|浏览(955)

我有一张table:

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

对于第1列:我尝试使用以下方法获取数据: regexp_replace(column1, '[^0-9]', '') as column1_numeric; 但这对第二行不起作用,返回2700
对于专栏2:我正在尝试: regexp_replace(regexp_extract(column2,'\\((.*?)\\)'), '[^0-9]', '') as column2_numeric 但这对于第二行也不起作用,并返回空值
有什么建议吗?

u3r8eeie

u3r8eeie1#

从字符串中提取最后一个数值 '(\\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*)$'
sshcrbum

sshcrbum2#

如果您使用下面的正则表达式,它将同时适用于这两列,并且只从字符串中提取数字。

var numberPattern = /\d+/g;
'The first value is 200 gb'.match( numberPattern ).join('') // 200

'need to restart (2 times)'.match( numberPattern ).join('') // 2
ccrfmcuu

ccrfmcuu3#

请试试这个
选择regexp\u replace('第一个值为200 gb','[^0-9]','')
结果是200分
试试这个:
选择regexp\u replace(substring('第二个值为200 gb',-6),'[^0-9]','')

相关问题