Hive时间格式处理
时间格式转换2020-09-19 00:15:32=>20200919
原时间格式:2020-09-19 00:15:32
目标格式:20200919
首先使用Hive的函数进行转换
1. to_date('2020-09-19 00:15:32') ==> 2020-09-19
2. regexp_replace('2020-09-19','-','')==> 20200919
结果语句:
regexp_replace(to_date('2020-09-19 00:15:32'),'-','') ==> 20200919
时间格式计算
两个秒级时间格式进行相减得到分钟数
原始数据:
2020-09-19 00:12:01
2020-09-19 00:11:46
使用的hive函数为: unix_timestamp :获取当前时间戳
同时使用的是日期转时间戳
unix_timestamp('2020-09-19 00:12:01') - unix_timestamp('2020-09-19 00:11:46')
-
当只有一个参数时 unix_timestamp(string timestame),此时输入的参数必须为’yyyy-MM-dd HH:mm:ss’格式,否则返回null
select unix_timestamp(‘2019-08-15 16:40:00’) --1565858400
select unix_timestamp(‘2019-08-15’) --null -
当有两个参数时,此时需要保证两个参数的对应关系
select unix_timestamp(‘2019-08-15’,‘yyyy-MM-dd’) --1565798400
select unix_timestamp(‘2019-08-15 16:40:00’,‘yyyy-MM-dd HH:mm:ss’) --1565858400
select unix_timestamp(‘2019-08-15’,‘yyyy-MM-dd HH:mm:ss’) --null
最后的结算的结果为:
ceil((unix_timestamp('2020-09-19 00:12:01') - unix_timestamp('2020-09-19 00:11:46'))/60 分钟数(向上取整)
ceil((unix_timestamp('2020-09-19 00:12:01') - unix_timestamp('2020-09-19 00:11:46'))/60/60 小时数(向上取整)
select datediff(from_unixtime(unix_timestamp('20150514','yyyyMMdd'),'yyyy-MM-dd'),from_unixtime(unix_timestamp('20150415','yyyyMMdd'),'yyyy-MM-dd')) from mid.dual;
结果为:29
select datediff(from_unixtime(unix_timestamp('20150514','yyyyMMdd'),'yyyy/MM/dd') , from_unixtime(unix_timestamp('20150415','yyyyMMdd'),'yyyy/MM/dd')) from mid.dual;
结果为null
Hive不支持‘/’的日期相减