/********************************************************************************************************* Nyårsdagen - 1 januari Trettondedag jul - 6 januari Långfredagen - rörlig, fredagen närmast före påskdagen Påskdagen - rörlig, söndagen närmast efter den fullmåne som infaller på eller närmast efter den 21 mars Annandag påsk - rörlig, dagen efter påskdagen Första maj - 1 maj (sedan 1939) Kristi himmelsfärdsdag - rörlig, sjätte torsdagen efter påskdagen Pingstdagen - rörlig, sjunde söndagen efter påskdagen Sveriges nationaldag - 6 juni Midsommardagen - rörlig, lördagen mellan 20 juni och 26 juni Alla helgons dag - rörlig, lördagen mellan 31 oktober och 6 november Juldagen - 25 december Annandag jul - 26 december *********************************************************************************************************/ CREATE TABLE dbo.Holidays ( DateCol DATE NOT NULL CONSTRAINT DateCol PRIMARY KEY ,DayInWeek VARCHAR(10) NOT NULL ,IsHoliday BIT DEFAULT(0) NOT NULL ,HolidayName VARCHAR(50) NULL ); INSERT dbo.Holidays (DateCol, DayInWeek) SELECT DATEADD(DAY, I, '1999-12-31'), CASE DATENAME(DW, DATEADD(DAY, I, '1999-12-31')) WHEN 'Monday' THEN 'Måndag' WHEN 'Tuesday' THEN 'Tisdag' WHEN 'Wednesday' THEN 'Onsdag' WHEN 'Thursday' THEN 'Torsdag' WHEN 'Friday' THEN 'Fredag' WHEN 'Saturday' THEN 'Lördag' WHEN 'Sunday' THEN 'Söndag' END FROM dbo.GetNums2(32000); UPDATE dbo.Holidays SET HolidayName = CASE WHEN DATEPART(MONTH, DateCol) = 12 AND DATEPART(DAY, DateCol) = 25 THEN 'Juldagen' WHEN DATEPART(MONTH, DateCol) = 12 AND DATEPART(DAY, DateCol) = 26 THEN 'Annandag jul' WHEN DATEPART(MONTH, DateCol) = 1 AND DATEPART(DAY, DateCol) = 1 THEN 'Nyårsdagen' WHEN DATEPART(MONTH, DateCol) = 1 AND DATEPART(DAY, DateCol) = 6 THEN 'Trettondedag jul' WHEN DATEPART(MONTH, DateCol) = 5 AND DATEPART(DAY, DateCol) = 1 THEN 'Första maj' WHEN DATEPART(MONTH, DateCol) = 6 AND DATEPART(DAY, DateCol) = 6 THEN 'Sveriges nationaldag' WHEN dbo.udf_CalculateEaster(year(DateCol)) = DateCol THEN 'Påskdagen' WHEN DATEADD(DAY, -2, dbo.udf_CalculateEaster(year(DateCol))) = DateCol THEN 'Långfredagen' WHEN DATEADD(DAY, 1, dbo.udf_CalculateEaster(year(DateCol))) = DateCol THEN 'Annandag påsk' WHEN DATEADD(DAY, 39, dbo.udf_CalculateEaster(year(DateCol))) = DateCol THEN 'Kristi himmelsfärdsdag' WHEN DATEADD(DAY, 49, dbo.udf_CalculateEaster(year(DateCol))) = DateCol THEN 'Pingstdagen' WHEN DATEPART(MONTH, DateCol) = 6 AND DATEPART(DAY, DateCol) >= 20 AND DATEPART(DAY, DateCol) <= 26 AND DayInWeek = 'Lördag' THEN 'Midsommardagen' WHEN ((DATEPART(MONTH, DateCol) = 10 AND DATEPART(DAY, DateCol) = 31) OR (DATEPART(MONTH, DateCol) = 11 AND DATEPART(DAY, DateCol) <= 6)) AND DayInWeek = 'Lördag' THEN 'Alla helgons dag' END; UPDATE dbo.Holidays SET IsHoliday = 1 WHERE HolidayName IS NOT NULL; SELECT * FROM dbo.Holidays WHERE HolidayName IS NOT NULL;