计算⽇期差【hive】
在hive中有计算两个⽇期的天数差的函数:
⽇期差值:datediff(结束⽇期,开始⽇期),返回结束⽇期减去开始⽇期的天数。
1select datediff(CURRENT_DATE,'2019-01-01') as datediff;
2+-----------+--+
3|datediff|
4+-----------+--+
5|445|
6+-----------+--+
在实际使⽤过程中,⼤多数时候⽇期的存储格式是'yyyyMMdd',那么可以变换⽇期格式为'yyyy-MM-dd'之后再使⽤函数datediff:在hive中没有可以直接转换的函数,需要先经过中间状态:时间戳格式
先将⽇期由'yyyyMMdd'格式转换为时间戳:
1select unix_timestamp('20160816','yyyyMMdd');
2+-----------+--+
3|datediff|
4+-----------+--+
5|1471276800|
6+-----------+--+
再将时间戳转换为'yyyy-MM-dd'格式:
1select from_unixtime(1471276800,'yyyy-MM-dd');
2+-----------+--+
3|datediff|
4+-----------+--+
5|2016-08-16|unix时间戳转换日期格式
6+-----------+--+
合并使⽤:
1select from_unixtime(unix_timestamp('20160816','yyyyMMdd'),'yyyy-MM-dd') ;
2+-----------+--+
3|datediff|
4+-----------+--+
5|2016-08-16|
6+-----------+--+
之后就可以愉快的计算⽇期差啦~~
附赠其他⽇期转换:
固定⽇期转换成时间戳
select unix_timestamp('2016-08-16','yyyy-MM-dd') --1471276800
select unix_timestamp('20160816','yyyyMMdd') --1471276800
select unix_timestamp('2016-08-16T10:02:41Z', "yyyy-MM-dd'T'HH:mm:ss'Z'") --1471312961
16/Mar/2017:12:25:01 +0800 转成正常格式(yyyy-MM-dd hh:mm:ss)
select from_unixtime(to_unix_timestamp('16/Mar/2017:12:25:01 +0800', 'dd/MMM/yyy:HH:mm:ss Z'))
时间戳转换程固定⽇期
select from_unixtime(1471276800,'yyyy-MM-dd') --2016-08-16
select from_unixtime(1471276800,'yyyyMMdd') --20160816
select from_unixtime(1471312961) --    2016-08-16 10:02:41
select from_unixtime( unix_timestamp('20160816','yyyyMMdd'),'yyyy-MM-dd')  --2016-08-16
select date_format('2016-08-16','yyyyMMdd') --20160816

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。