Sql server feestdagen
From WickyWiki
This is an example to determine if a date is a Dutch holiday.
Create or alter Function Werkdag(@d1 as date)
Returns varchar(15) As
Begin
Declare @Result varchar(15)='werkdag'
Declare @yyyy int
DECLARE @datum DATE;
DECLARE @pasen DATE;
DECLARE @D02 int; DECLARE @D03 int; DECLARE @D04 int;
DECLARE @D05 int; DECLARE @D07 int; DECLARE @D10 int;
DECLARE @D13 int; DECLARE @MMM int; DECLARE @DDD int;
IF DATEPART(WEEKDAY, @d1) = 7 SET @Result = 'zaterdag'
IF DATEPART(WEEKDAY, @d1) = 1 SET @Result = 'zondag'
-- feestdagen
SET @yyyy = year(@d1)
SET @datum =datefromparts(@yyyy, 1, 1)
IF @d1=@datum SET @Result = 'nieuwjaar'
--maankalender
SET @D02 = @yyyy % 19;
SET @D03 = @yyyy / 100;
SET @D04 = @yyyy % 100;
SET @D05 = @D03 / 4;
SET @D07 = (8*@D03+13) / 25;
SET @D10 = ( 19*@D02 + @D03 - @D05 - @D07 + 15 - (7*@D02 + (11*(@D03 - @D05 - @D07) - 4)/30 + 6)/11 ) % 29;
SET @D13 = (32 + 2*(@D03 % 4) + 2*(@D04 / 4) - (@D04 % 4) - @D10) % 7;
SET @MMM = (90+@D10+@D13) / 25;
SET @DDD = (19+@D10+@D13+@MMM) % 32;
SET @pasen = datefromparts(@yyyy, @MMM, @DDD);
-- Goede vrijdag
SET @datum = DATEADD(DAY, -2, @pasen)
IF @d1=@datum SET @Result = 'goede vrijdag'
-- 2e Pasen
SET @datum = DATEADD(DAY, 1, @pasen)
IF @d1=@datum SET @Result = '2e pasen'
-- Koningsdag
-- PERIODETYPE 1=feestdag, 0=feestdag op za/zo
IF @yyyy<1949
SET @datum = datefromparts(@yyyy,8,31);
ELSE IF @yyyy<2014
SET @datum = datefromparts(@yyyy,4,30);
ELSE
SET @datum = datefromparts(@yyyy,4,27);
-- op zondag? dan naar zaterdag
IF DATEPART(WEEKDAY,@datum)=1
SET @datum = DATEADD(DAY, -1, @datum)
IF @d1=@datum SET @Result = 'koningsdag' -- / koninginnendag
-- Hemelvaart
SET @datum = DATEADD(DAY, 5*7+4, @pasen)
IF @d1=@datum SET @Result = 'hemelvaart'
-- 2e Pinksteren
SET @datum = DATEADD(DAY, 7*7+1, @pasen)
IF @d1=@datum SET @Result = '2e pinksteren'
-- 1e kerstdag
SET @datum =datefromparts(@yyyy, 12, 25)
IF @d1=@datum SET @Result = '1e kerstdag'
-- 2e kerstdag
SET @datum =datefromparts(@yyyy, 12, 26)
IF @d1=@datum SET @Result = '2e kerstdag'
Return @Result
End
GO
Voorbeeld gebruik:
select d1, Werkdag(d1)
from (
SELECT datefromparts(2023,4,ROW_NUMBER() OVER (ORDER BY @@SPID)) as d1
FROM STRING_SPLIT(REPLICATE(',', 30-1), ',') ) as t