在数据处理的过程中,有时候会碰到一些需要使用日历的场景,在使用中碰到过的有
1.计算工作日(可以抽象一些理解为为不同日期的权重不一样,工作日权重为1,其他为0)
2.计算财年、财务月、财务周(和自然日期有所不同)
3.利用日期区间展开一些计算(比如将某张账单金额拆到账单对应得一个时间区间)
这里记录一段日历表的生成HiveSQL,需要执行引擎里有日期加减函数并支持CTE语法
with tmp_num as (
select num from values
(0)
,(1)
,(2)
,(3)
,(4)
,(5)
,(6)
,(7)
,(8)
,(9)
t(num)
)
,number as(
select /*+mapjoin(num_10,num_100,num_1000,num_10000)*/
num_0.num+num_10.num*10+num_100.num*100+num_1000.num*1000+num_10000.num*10000 as number
from tmp_num num_0
join tmp_num num_10
join tmp_num num_100
join tmp_num num_1000
join tmp_num num_10000
)
,calendar as(
select dateadd(to_date('19900101','yyyyMMdd'),number,'dd') as day
from number
)
select to_char(day,'yyyyMMdd') as dt
,to_char(day,'yyyyMM') as dt_month
,to_char(day,'yyyy') as dt_year
from calendar