Submitted by
Category
Review Cycle
.
Public
Joachim Mutter/sysarc
on
11/11/2020
at
09:20 AM
SQL\Code, SQLServer
Wochenede-/Feiertagsberechnung
Problem
Die Berechnung des nächsten Werktages unter Berücksichtigung von Wochenenden und deutschen Feiertagen auf Basis T-SQL.
Lösung
Dazu ist eine Funktion nötig, die den Ostersonntag berechnet. Dazu hatte das US Institut "Astronomical Applications Department of the U.S Naval Observatory -
http://aa.usno.navy.mil/faq/docs/easter.php
" ein PHP Script geschrieben,
das von "Tim Cullan" nach T-SQL übersetzt wurde.
Diese Funktion ist dann Basis der Stored Procedure, die auf Basis des Ostersonntags alle variablen Feiertage berechnet und zusätzlich noch all fixen Feiertage.
Das Ganze wird nun noch mit den Bundesländern verknüpft und fertig ist der Code. Die Stored Procedure liefert auf Basis eines Prüfdatums und des Bundeslandes Kürzels einen Wert zurück, der > 0 ist, wenn das übergebene Datum ein Feiertag ist.
Der Rückgabewert ist immer der Wert bis zum nächsten Tag außerhalb eines Feiertagszeitraumes. Wenn man z.b. Osterfreitag (2021-04-02) übergibt, dann würde der Returnwert 4 sein.
Code
Mit der ebenfalls angefügten Funktion CheckForWeekend() kann man denn einfach ein Statement bauen, das den nächsten Werktag liefert:
DECLARE @Date date = '2020-04-02' -- Good Friday
,@NextWorkingDay date
,@Correction int
SET @Date = DateAdd(day, [dbo].[CheckForWeekend](@Date), @Date)
exec @Correction = [dbo].[GermanPublicHoliday] @Date, 'HE'
SET @NextWorkingDay = DateAdd(day, @Correction, @NextWorkingDay)
print 'CheckDate = ' + convert(varchar, @Date, 121) + ', NextWorkingDay = '
+ convert(varchar, @Date, 121) + '[' + cast(@Correction as varchar) + ']'
Create_FN_CheckForWeekend.sql
Check_FN_PublicHoliday.sql
Zur SysArc Homepage ...