Hive日期转换

时间:2016-12-05 07:34:29

标签: sql hive

我打算通过在其日期键中添加366 days来扩展表中的某些记录:

to_date(date_add(from_unixtime(unix_timestamp('20150101' ,'yyyyMMdd'), 'yyyy-MM-dd'), 366)) as new_date

  
    

2016年1月1日

  

但是如何将此值转换回原始密钥的格式,即20160101

2 个答案:

答案 0 :(得分:0)

date_add 为您提供日期类型作为输出。 由于您已使用from_unixtimeunix_timestamp,我们假设您已经了解其功能。 在Hive / Impala中,没有像MySQL / MariaDB这样的原生DATE_FORMAT函数,因此您必须将 date_add 的输出转换为< strong> unix_timestamp ,然后在输出中使用 from_unixtime 以获得所需的格式。

有些事情:

select 
   from_unixtime(unix_timestamp(
   date_add(from_unixtime(unix_timestamp('20150101' ,'yyyyMMdd')), 365)), 
   'yyyyMMdd');

答案 1 :(得分:0)

由于您要求的日期是2016-01-01,因此您似乎想要添加365天而不是366。

select from_unixtime(unix_timestamp(date_add(from_unixtime(unix_timestamp(
           '20150101','yyyyMMdd')),365),'yyyy-MM-dd'),'yyyyMMdd');

演示

hive> select from_unixtime(unix_timestamp(date_add(from_unixtime(unix_timestamp(
    >            '20150101','yyyyMMdd')),365),'yyyy-MM-dd'),'yyyyMMdd');
OK
20160101