Hive date_format()where子句中包含
我们使用一个内置日历表dm_reference.dim_date和一系列日期: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
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月当天或之后直到上个月底的所有日期。如果您需要直到今天的数据,请使用结束条件作为日历日期,这很有效,但我刚刚使用时注意到