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 |
||
| Line 9: | Line 9: | ||
Returns varchar(15) As | Returns varchar(15) As | ||
Begin | 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 @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; | ||
Revision as of 10:13, 4 December 2023
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