Hive date_format()where子句中包含

Hive date_format()where子句中包含,hive,hiveql,Hive,Hiveql,我们使用一个内置日历表dm_reference.dim_date和一系列日期: select * from dm_reference.dim_date limit 10; calendar_date date_name, day_of_week 1999-01-01 January 1, 1999 1 5 Friday 1999-01-02 January 2, 1999 2 6 Saturday 1999-01-03 January 3, 1999 3 7 Su

我们使用一个内置日历表dm_reference.dim_date和一系列日期:

select * from dm_reference.dim_date limit 10;
calendar_date  date_name, day_of_week
1999-01-01  January 1, 1999 1   5   Friday
1999-01-02  January 2, 1999 2   6   Saturday
1999-01-03  January 3, 1999 3   7   Sunday
1999-01-04  January 4, 1999 4   1   Monday
1999-01-05  January 5, 1999 5   2   Tuesday
1999-01-06  January 6, 1999 6   3   Wednesday
1999-01-07  January 7, 1999 7   4   Thursday
1999-01-08  January 8, 1999 8   5   Friday
1999-01-09  January 9, 1999 9   6   Saturday
1999-01-10  January 10, 1999    10  7   Sunday
我想将其过滤为只包括2014年8月和本年度月份之间的日期

如果我从dm_reference.dim_date中选择mindate_format calendar_date,yyyyymm,则返回199901

因此,我尝试了以下查询,将我的日历日期字段格式化为年和月,然后进行筛选以包括8月14日到现在的日期:

select 
  distinct date_format(calendar_date, "YYYY-MMM") as year_month
  ,  date_format(calendar_date, "YYYYMM") as year_month_num -- for ordering in asc
from dm_reference.dim_date
  where date_format(calendar_date, "YYYYMM") <= 201408
    and  date_format(calendar_date, "YYYYMM") <= date_format(from_unixtime(unix_timestamp()), "YYYYMM")    
    order by year_month_num;
它返回的日期可以追溯到1999年,而我预计这个查询结果中最早的日期是2014年8月


知道为什么会这样吗?如何查询我们的日历,使其只包含筛选的日期范围?

我认为您使查询复杂化了。您只需使用

select * 
from dm_reference.dim_date
where calendar_date >= '2014-08-01' and calendar_date < trunc(current_date,'MM')

这将输出2014年8月当天或之后直到上个月底的所有日期。如果您需要直到今天的数据,请使用结束条件作为日历日期,这很有效,但我刚刚使用时注意到