Перейти к содержимому

Фотография

Happy New Year


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 LKhiger

LKhiger

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Леонид Хигер
  • Город:NY

Отправлено 01 января 2010 - 00:42

!!! Happy New Year !!!

This calendar is my gift to you.
It will change only on the last day of the year:


with 
last_day(last_day) as 
(
select 
case 
when month(current date) = 12 and day(current date) = 31 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) as
(
select last_day, varchar('', 3), int(0) 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
from calendar
where clnd_day_no  <= 366 
)
select clnd_day "Day of Year", clnd_dayofweek "Day of Week"
from calendar, last_day
where year(clnd_day) = year(last_day) + 1

Lenny
  • 0

#2 LKhiger

LKhiger

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Леонид Хигер
  • Город:NY

Отправлено 06 января 2010 - 13:18

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
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных