蜂巢中的Regex_extract提取日期

时间:2019-01-30 07:54:51

标签: hive

我需要Hive中的regex_extract帮助。我有一个字符串列,我需要从中提取日期。样本数据如下

Abc def: 23-oct-17
Def:abc abc: 23-nov-2017
My data is: 17-nov-17

3 个答案:

答案 0 :(得分:0)

以下正则表达式与字符串23-nov-2017中的Abc def: 23-oct-17 Def:abc abc: 23-nov-2017匹配

((3[01]|[12][0-9]|[1-9])-[a-zA-Z]{3,}-[0-9]{4,})

它也可以匹配例如3-oct-2018。也就是说,它允许数字介于1-31之间,后跟“-”,三个字母的月份名称,另一个“-”和四个数字年份。

答案 1 :(得分:0)

split()函数也是基于正则表达式的,您可以按分号+一个或多个空格进行分割:

select
split(str,':\\s+')[1] date
from
(
select 
stack(3,
'Abc def: 23-oct-17',
'Def:abc abc: 23-nov-2017',
'My data is: 17-nov-17'
) as str
)s

结果:

OK
23-oct-17
23-nov-2017
17-nov-17
Time taken: 0.063 seconds, Fetched: 3 row(s)

答案 2 :(得分:0)

由于数据是字符串的最后一部分,因此您可以在下面的查询中使用

hive> select regexp_extract('Def:abc abc: 23-nov-2017', '\\d*-\\w*-\\d*$', 0);
OK
23-nov-2017

在reg ex之上将使用模式DD-MON-YYYY匹配字符串的结尾