2016-08-19 47 views
0

我们有这样的字符串:子字符串的提取物在蜂巢

ABC.XXXXXXX.USD.XX

,任务是提取货币(在这种情况下美元)。 选项我想回报废话:

select distinct 
    r.name 
    ,regexp_extract(r.name,'\.(.{3})\.',1) 
    ,split(r.name,'\.') 
    ,split(r.name,'\.')[2] 
from sales r 

输出:

ABC.XXXXXXX.USD.XX BC. ["","","","","","","","","","","","",""] <empty> 

怎么来的?

+1

可能是由于逃逸?尝试''\\。'':''\\。(。{3})\\。','split(r.name,'\\。') –

回答

0

Hive中的split函数基于正则表达式。看到language manual on the wiki

split(string str, string pat) 
    Split str around pat (pat is a regular expression) 

你指定为"\.",即解析为一个单纯.,在正则表达式,匹配任何字符,从而一个未定义的转义序列分隔符,它的每个字符之间拆分,并且还在字符串的开始和结尾。

你需要转义,可以在一个字符串文字作为"\\."

0

定义的反斜线点只是把在方括号,如:

split(r.name,'[\.]')[2]