hive中字符串和⽇期的转换常⽤的函数⼤全获取本地时间:
⽤到from_unixtime和unix_timestamp两种函数:
from_unixtime:时间戳转⽇期函数
⽤法:from_unixtime(bigint unixtime[, stringformat])
返回值: string
例⼦1:获取当前Linux的系统⽇期
substr(from_unixtime(unix_timestamp()),1,10)
结果为:2017-01-03
例⼦2:
--20180905转成2018-09-05
select from_unixtime(unix_timestamp('20180905','yyyymmdd'),'yyyy-mm-dd')
shi_data
--结果如下:
2018-09-05
--2018-09-05转成20180905
select from_unixtime(unix_timestamp('2018-09-05','yyyy-mm-dd'),'yyyymmdd')
shi_data
--结果如下:
20180905
unix_timestamp:⽇期转时间戳函数
⽤法:unix_timestamp(string date)
注意:⾥⾯格式必须是yyyy-MM-dd HH:mm:ss,如果不是会返回null值
返回值:  bigint
例⼦:select unix_timestamp('2017-09-05 12:01:03')
shi_data;
结果如下:
1536120063
--获取当前⽇期的时间戳:
select unix_timestamp()
shi_data;
结果如下:
1536126324
字符串的转换:
hive表中,存放着⽆法直接识别的字符串格式的时间,如'20170728102031',要计算两个时间相差的秒数。
解决⽅法:
1、先将字符串调整为hive可以识别的格式,即将形如'20170728102031' 转成 '2017-07-28 10:20:31'。 因为hive的regexp_replace 不⽀持⼦语句,没法⼀次转换,只能⽤万能的 substr 和拼接函数来写了
select concat(substr('20170728102031',1,4),'-',
substr('20170728102031',5,2),'-',
substr('20170728102031',7,2),' ',
substr('20170728102031',9,2),':',
substr('20170728102031',11,2),':',
substr('20170728102031',13,2))
2、⽤ unix_timestamp 转成unix时间戳,然后计算两个⽇期相差秒数
select unix_timestamp(concat(substr('20170728102031',1,4),'-',substr('20170728102031',5,2),'-',
substr('20170728102031',7,2),' ',
substr('20170728102031',9,2),':',
substr('20170728102031',11,2),':',
substr('20170728102031',13,2))) - unix_timestamp(concat(substr('20170728112031',1,4),'-',
substr('20170728112031',5,2),'-',
substr('20170728112031',7,2),' ',
substr('20170728112031',9,2),':',
substr('20170728112031',11,2),':',
substr('20170728112031',13,2)))
datediff的⽤法:
hive > select create_time ,datediff(from_unixtime(unix_timestamp(),’yyyy-MM-dd HH:mm:ss’), create_time) from test;结果就是:当前时间是2017-11-16 与create_time的11-10之间差了6天,输出6;
hive >select datediff(’2012-12-08′,’2012-05-09′) from dual;
213
to_date的⽤法:
⽇期时间转⽇期函数: to_date语法: to_date(string timestamp) 返回:string
hive> select to_date(’2011-12-08 10:03:01′) from dual;
2011-12-08
year语法:
⽇期转年函数: year语法: year(string date)
hive> select year(’2011-12-08 10:03:01′) from dual;
2011
以下可以取到 month,hour,minute,second ⽤法和上⾯的⼀样
weekofyear语法:
⽇期转周函数: weekofyear语法: weekofyear (string date) 返回值: int 说明: 返回⽇期在当前的周数。
举例: hive> select weekofyear(’2011-12-08 10:03:01′) from dual;
49
date_add⽤法:
⽇期增加函数: date_add语法:  date_add(string startdate, int days)
返回值: string
说明: 返回开始⽇期startdate增加days天后的⽇期
举例:
hive> select date_add(’2012-12-08′,10) from dual;
2012-12-18
date_sub⽤法:
⽇期减少函数: date_sub语法: date_sub (string startdate, int days)
返回值: string
说明: 返回开始⽇期startdate减少days天后的⽇期。
举例:
hive> select date_sub(’2012-12-08′,10) from dual;
2012-11-28
所以我们利⽤其中的hour和datediff来获取create_time与当前时间的⼩时差:
hive> select create_time,
(hour(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'))-
hour(create_time)+(datediff(from_unixtime(unix_timestamp(),
'yyyy-MM-dd HH:mm:ss'), create_time))*24) as hour_dValue
from test;
2017-11-10 09:43:35  145
datediff是字符型函数

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