如何在Hive中使用RegEx函数从字符串字段中提取日期
Hive正则提取日期实现方案
核心使用Hive内置regexp_extract函数实现,适配M/d/yyyy或MM/dd/yyyy格式的日期提取。
实现代码
假设源表为test_table,存储待处理字符串的字段为content_str,查询逻辑如下:
SELECT -- 提取第一个匹配的日期 regexp_extract(content_str, '.*?(\\d{1,2}/\\d{1,2}/\\d{4})', 1) AS Date1, -- 提取第二个匹配的日期 regexp_extract(content_str, '.*?(\\d{1,2}/\\d{1,2}/\\d{4}).*?(\\d{1,2}/\\d{1,2}/\\d{4})', 2) AS Date2 FROM test_table;
如果需要输出你示例中带前缀的格式,用concat拼接即可:
SELECT concat('Date1 : ', regexp_extract(content_str, '.*?(\\d{1,2}/\\d{1,2}/\\d{4})', 1)) AS Date1, concat('Date2 : ', regexp_extract(content_str, '.*?(\\d{1,2}/\\d{1,2}/\\d{4}).*?(\\d{1,2}/\\d{1,2}/\\d{4})', 2)) AS Date2 FROM test_table;
规则说明
- 正则中
\\d{1,2}匹配1-2位数字,兼容单数字的月份/日期,比如7/26/2021、8/6/2021、12/10/2021都可以正常匹配 .*?是非贪婪匹配,避免字符串前半部分的内容吃掉要提取的目标日期
拿你提供的示例字符串测试,输出结果和要求完全一致。
内容的提问来源于stack exchange,提问作者Jayaprakash Neela
相关产品推荐
相关产品推荐

