如何获取一种日期格式前的20天:YYYYMMDD
?函数date_sub()
似乎不起作用。
例如在Hive中获取日期'20180912'
前20天。
我正在使用date_sub()
按日期联接两个表。
select a.*,b.*
from table1
left join
table2
on
from_unixtime(unix_timestamp(date1,'yyyymmdd'))=date_sub(date2,20)
,不返回任何内容。
答案 0 :(得分:2)
您使用的格式是错误的一种。大写/小写matters a lot。正确的格式是'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'))
进行转换,效果很好。
答案 1 :(得分:1)
好的,date_sub可以满足您的要求,如下所示:
select date_sub(CAST(unix_timestamp('20180912','yyyyMMdd') AS TIMESTAMP), 20) as date;
+-------------+--+
| date |
+-------------+--+
| 2018-08-23 |
+-------------+--+
您的联接SQL可能如下所示:
select
a.*,
b.*
from
table1
left join
table2 on date1 = regexp_replace(cast(to_date(date_sub(CAST(unix_timestamp(cast(date2 as string),'yyyyMMdd') AS TIMESTAMP), 20)) as string),'-','')