Hive中如何将"Mon Mar 14 00:04:26 +0000 2016"转为yyyy-mm-dd格式?
Hive中转换特定时间字符串为yyyy-mm-dd格式的实现方案
嘿,这个需求我在日常工作里经常碰到,给你分享两个实用的实现方法,适配不同版本的Hive:
方案一:兼容低版本Hive(适用于Hive 2.1.0以下)
利用unix_timestamp()将输入的时间字符串转换成时间戳,再通过from_unixtime()将时间戳格式化为目标日期格式。关键是要匹配正确的输入时间格式符:
SELECT from_unixtime( unix_timestamp('Mon Mar 14 00:04:26 +0000 2016', 'EEE MMM dd HH:mm:ss Z yyyy'), 'yyyy-MM-dd' ) AS formatted_date;
注意事项:
- 输入格式符
EEE对应星期缩写(如Mon),MMM对应月份缩写(如Mar),Z对应时区偏移(如+0000),这些格式符的大小写不能错 - 如果你的Hive环境默认locale不是英文,可能会出现月份/星期解析失败的情况,需要临时设置locale为英文:
SET mapreduce.map.java.opts=-Duser.language=en; SET mapreduce.reduce.java.opts=-Duser.language=en;
方案二:高版本Hive推荐(Hive 2.1.0及以上)
Hive 2.1.0开始支持to_timestamp()函数,可以直接将字符串解析为时间戳类型,再用date_format()格式化,代码更简洁直观:
SELECT date_format( to_timestamp('Mon Mar 14 00:04:26 +0000 2016', 'EEE MMM dd HH:mm:ss Z yyyy'), 'yyyy-MM-dd' ) AS formatted_date;
测试结果
以上两种方案运行后,都会输出结果:2016-03-14,完全符合你的格式要求。
内容的提问来源于stack exchange,提问作者Avinit Mohanty
相关产品推荐
相关产品推荐

