Sql server feestdagen: Difference between revisions

From WickyWiki
Created page with "Category:Windows Category:Windows SQL Server Category:202312 This is an example to determine if a date is a Dutch holiday. <source lang=sql> 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; DE..."
 
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 2: Line 2:
[[Category:Windows SQL Server]]
[[Category:Windows SQL Server]]
[[Category:202312]]
[[Category:202312]]
<!-- holiday vrij feestdag pasen easter -->
More info here:
* https://nl.wikipedia.org/wiki/Paas-_en_pinksterdatum


This is an example to determine if a date is a Dutch holiday.
This is an example to determine if a date is a Dutch holiday.
Line 9: Line 14:
Returns varchar(15) As
Returns varchar(15) As
Begin
Begin
Declare @Result varchar(15)='werkdag'
DECLARE @Result varchar(15)='werkdag'
Declare @yyyy int
DECLARE @yyyy int
    DECLARE @datum DATE;
DECLARE @datum DATE;
    DECLARE @pasen DATE;
DECLARE @pasen DATE;
    DECLARE @D02 int; DECLARE @D03 int; DECLARE @D04 int;  
DECLARE @D02 int; DECLARE @D03 int; DECLARE @D04 int;  
DECLARE @D05 int; DECLARE @D07 int; DECLARE @D10 int;  
DECLARE @D05 int; DECLARE @D07 int; DECLARE @D10 int;  
DECLARE @D13 int; DECLARE @MMM int; DECLARE @DDD int;
DECLARE @D13 int; DECLARE @MMM int; DECLARE @DDD int;

Latest revision as of 16:20, 17 April 2024


More info here:

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