首页 > 解决方案 > 如何获得一个日期前 20 天的格式:YYYYMMDD

问题描述

如何在一个日期格式前获得 20 天:YYYYMMDD?功能date_sub()似乎不起作用。

例如'20180912'在 Hive 中获取 20 天前的日期。

我正在使用date_sub()按日期连接两个表。

select a.*,b.*
from table1
left join
table2 
on
from_unixtime(unix_timestamp(date1,'yyyymmdd'))=date_sub(date2,20)

并且什么都不返回。

标签: datehivehiveql

解决方案


您使用的格式是错误的。大写/小写很重要。正确的格式是“yyyyMMdd”。

Date_sub 需要 yyyy-MM-dd 才能正常工作,必要时进行转换。

select date_sub(from_unixtime(unix_timestamp('20180912','yyyyMMdd')),20) ;
OK
2018-08-23

Cast as timestamp 产生错误的结果 (1970 年),这可能是我的 Hive 版本(1.2.1)中的一个问题

select cast(unix_timestamp('20180912','yyyyMMdd') as timestamp);
OK
1970-01-18 18:51:50.4

用于 from_unixtime(unix_timestamp('20180912','yyyyMMdd')) 转换,它工作正常。


推荐阅读