2016-12-05 54 views
0

我打算通过添加366 days到它的日期键延伸在一个表中的某些记录:蜂房日期转换

to_date(date_add(from_unixtime(unix_timestamp('20150101' ,'yyyyMMdd'), 'yyyy-MM-dd'), 366))作为NEW_DATE

2016年1月1日

但是如何将这个值转换回原始密钥的格式,例如20160101

+0

您已经提供了自己的答案!使用与输入日期'yyyyMMdd' –

回答

0

由于您请求的日期是2016年1月1日,似乎要添加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 
0

date_add为您提供日期类型作为输出。 因为您已经使用过from_unixtimeunix_timestamp,所以我会假设您已经知道它们的功能。 在蜂巢/黑斑羚,还有像MySQL/MariaDB的没有本地DATE_FORMAT功能,所以你必须给你的date_addunix_timestamp的输出转换,然后使用from_unixtime在输出达到预期的格式。

东西线沿线的:

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

相同的格式,你可以添加一个解释你的代码的作用,以及一些换行符,所以它实际上是可读的吗? –