Wielkanoc, święta, dni wolne…
Co jakiś czas na forum wss.pl powraca temat jak zrobić kalendarz żeby było dobrze, żeby obliczał święta ruchome, żeby nie trzeba ich było wklepywać z palca itd itd. Podejścia do tematu możemy zrobić min. takie 2 rozwiązania:
- robimy prostą tabelę przechowującą dni świąteczne (w roku jest ich kilkanaście więc nawet można je wpisać ręcznie)
- robimy tabelę przechowującą wszystkie dni z interesującego nas zakresu i oznaczamy w niej dni “specjalne” będące np. dniem wolnym, weekendem itd
Jak się łatwo domyśleć drugie podejście jest o wiele bardziej uniwersalne pozwala łatwo wyliczyć liczbę dni pracujących pomiędzy datami itd.
Robiąc wczoraj porządki na laptopie znalazłem mój kod napisany bardzo dawno temu, który robi właśnie tabelę z kalendarzem i oznacza w niej święta oraz kilka innych ciekawych faktów.
co otrzymacie po wykonaniu skrypty:
1) tabelę dbo.mgDatyKalendarz z kolumnami:
- data datetime,
- rok,
- rok_przestepny,
- kwartal_roku,
- miesiac_roku,
- tydzien_roku,
- dzien_roku,
- dzien_miesiaca,
- dzien_miesiaca_ostatni,
- dzien_tygodnia,
- dzien_wolny,
- uwagi
2) funkcję wyliczającą datę Wielkanocy dla danego roku (dbo.mgDatyPobierzWielkanoc)
3) funkcję sprawdzającą czy dany rok jest rokiem przestępnym (dbo.mgDatyCzyRokPrzestepny)
4) procedurę wypełniającą tabelę kalendarza (dbo.mgDatyWypelnij)
Uwaga końcowa: powinniście dostosować rozwiązanie (kolumny w tabeli z datami oraz indeksy) na własne potrzeby – w szczególności indeksy, których nie ma.
Jeśli ktoś uważa że załączony kod może mu się przydać – nie ma problemu, jednakże jest dostarczany “as is” i nie odpowiadam jeśli wywoła jakieś szkody (aczkolwiek u mnie działa ;-)).
Link: kalendarz.sql