Calendar with some USA Holidays.
You can add your own scheduling of the day, or change to yours country holidays, following my logics:with
last_day(last_day) as
(select
case
when month(current date) = 12 and day(current date) = 30 then
current date - dayofyear(current date) days + 1 year
else
current date - dayofyear(current date) days
end
from sysibm.sysdummy1
)
,
calendar(clnd_day, clnd_dayofweek, clnd_day_no, scheduling) as
(select last_day, varchar('', 3), int(0), varchar('', 100)
from last_day
union all
select clnd_day + 1 day,
substr('SunMonTueWedThuFriSat',
3 * (dayofweek(clnd_day + 1 day) - 1) + 1 , 3),
clnd_day_no + 1,
case
when (month(clnd_day + 1 day) = 1 and day(clnd_day + 1 day) = 1 )
then 'New Year'
when (month(clnd_day + 1 day) = 12 and day(clnd_day + 1 day) = 25)
then 'Christmas Day'
when (month(clnd_day + 1 day) = 7 and day(clnd_day + 1 day) = 4)
then 'Independence Day'
when (month(clnd_day + 1 day) = 11 and dayofweek(clnd_day + 1 day) = 5)
and month(clnd_day + 8 day) = 12
then 'Thanksgiving Day'
when (month(clnd_day + 1 day) = 2 and dayofweek(clnd_day + 1 day) = 2)
and month(clnd_day - 6 day ) = 2 and month(clnd_day - 13 day) = 2
and month(clnd_day - 20 day) = 1
then 'President''s Day'
when dayofweek(clnd_day + 1 day) in (2, 3, 4, 5, 6)
then 'WeekDay'
when dayofweek(clnd_day + 1 day) in (1, 7)
then 'WeekEnd'
end
from calendar
where clnd_day_no <= 366
)
select clnd_day "Day of Year", clnd_dayofweek "Day of Week"
, scheduling
from calendar, last_day
where year(clnd_day) = year(last_day) + 1
Lenny