SQL Server Holidays Netherlands
From WickyWiki
SQL Server Dutch Holidays function
CREATE function dbo.Is_feestdag(@checkdatum date)
RETURNS nvarchar(20) as
BEGIN
DECLARE @D2 INT;
DECLARE @D3 INT;
DECLARE @D4 INT;
DECLARE @D5 INT;
DECLARE @D7 INT;
DECLARE @D10 INT;
DECLARE @D13 INT;
DECLARE @D14 INT;
DECLARE @D15 INT;
DECLARE @datum DATE;
DECLARE @omschr NVARCHAR(20);
DECLARE @yyyy INT=DATEPART(year,@checkdatum);
DECLARE @result nvarchar(20);
--koningsdag in @yyyy
IF @yyyy<1949
BEGIN
SET @datum=DATEFROMPARTS(@yyyy,8,31);
END
ELSE
BEGIN
IF @yyyy<2014
BEGIN
SET @datum=DATEFROMPARTS(@yyyy,4,30);
END
ELSE
BEGIN
SET @datum=DATEFROMPARTS(@yyyy,4,27);
END
END;
-- op zo dan een dag eerder
IF DATEPART(DW,@datum)=1
SET @datum=DATEADD(day,-1,@datum);
-- za/zo
IF DATEPART(DW ,@checkdatum) in (1,7)
BEGIN
SET @result='weekend'
END
ELSE
BEGIN
-- koningsdag / nieuwjaar / kerst
IF @checkdatum=@datum
BEGIN
SET @result='koningsdag'
END
IF @checkdatum=DATEFROMPARTS(@yyyy,1,1)
BEGIN
SET @result='nieuwjaar'
END
IF @checkdatum=DATEFROMPARTS(@yyyy,12,25)
BEGIN
SET @result='kerst'
END
IF @checkdatum=DATEFROMPARTS(@yyyy,12,26)
BEGIN
SET @result='kerst'
END
ELSE
BEGIN
--2e pasen/hemelvaart/2e pinksteren
SET @D2 = @yyyy % 19;
SET @D3 = floor(@yyyy/100);
SET @D4 = @yyyy % 100;
SET @D5 = floor(@D3/4);
SET @D7 = floor((8*@D3+13)/25);
SET @D10= (19*@D2+@D3-@D5-@D7+15-floor((7*@D2+floor((11*(@D3-@D5-@D7)-4)/30)+6)/11)) % 29;
SET @D13= (32+2*(@D3 % 4)+2*floor(@D4/4)-(@D4 % 4)-@D10) % 7;
SET @D14= floor((90+@D10+@D13)/25);
SET @D15= (19+@D10+@D13+@D14) % 32;
SET @datum = DATEFROMPARTS( @yyyy, @D14, @D15 );
IF @checkdatum = DATEADD(day,1,@datum)
BEGIN
SET @result='pasen'
END;
IF @checkdatum = DATEADD(day,39,@datum)
BEGIN
SET @result='hemelvaart'
END;
IF @checkdatum = DATEADD(day,1+49,@datum)
BEGIN
SET @result='pinksteren'
END;
END;
END;
RETURN @result;
END;
GO
Test:
with all_days as ( SELECT top 365 DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY object_id) -1, '20140101') as date1 FROM sys.all_objects ) select date1, dbo.Is_feestdag(date1) as speciaal from all_days ;