赞
踩
首先要实现一个日期列表,这里可以使用 posexplode()
函数,比如说我们想要 [2022-12-01, 2022-12-31] 的日期列表,具体实现如下:
select date_add('2022-12-01', pos) as curr_date
from (
select posexplode(split(space(datediff('2022-12-31', '2022-12-01')), ' ')) as (pos, val)
) t;
函数解释:
上述日期列表有了之后,具体日期维度的求解相对来说就比较简单了,各个维度的具体求解如下:
select year('2022-12-01 13:14:15');
select month('2022-12-01 13:14:15');
select day('2022-12-01 13:14:15');
select hour('2022-12-01 13:14:15');
select minute('2022-12-01 13:14:15');
select second('2022-12-01 13:14:15');
select weekofyear('2022-12-01 13:14:15');
--找一个星期一的日期,然后日期相减,取余,数字1-7分别代表星期一到星期日
select pmod(datediff('2022-12-01 13:14:15', '2018-01-01') + 1, 7);
--或者
--数字1-7分别代表星期一到星期日
select date_format('2022-12-01 13:14:15', 'u');
--当前日期所在周的下周周一的日期
select next_day('2022-12-01 13:14:15', 'Mon');
select date_sub(next_day('2022-12-01 13:14:15', 'Mon'), 7);
select date_sub(next_day('2022-12-01 13:14:15', 'Mon'), 1);
select dayofmonth('2022-12-01 13:14:15');
select trunc('2022-12-01 13:14:15', 'MM');
select last_day('2022-12-01 13:14:15');
select quarter('2022-12-01 13:14:15');
select trunc(add_months('2022-12-05', -(month('2022-12-05') - 1) % 3), 'MM');
--Hive3中支持
select trunc('2022-12-05 13:14:15', 'Q');
select last_day(add_months('2022-12-05', pmod(3 - month('2022-12-05'), 3)));
上述日期有的可以用 date_format() 函数实现,具体可参考之前文章:
Hive中date_format()函数的用法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。