Get Future Occurrences of Black Friday in SQL Server

-- Declare # of years you want dates for, the month, the day, and the occurrence of that day within the month
declare @years tinyint = 15;
declare @month_name varchar(10) = 'November';
declare @day_name varchar(10) = 'Friday';
declare @week_num tinyint = 4;

-- Build the calendar
WITH calendar
AS
(
  SELECT CAST(getdate() as date) AS [date]
  UNION ALL
  SELECT DATEADD(dd, 1, [date])
  FROM calendar
  WHERE DATEADD(dd, 1, [date]) <= dateadd(year,@years,getdate())
)

-- Get the month and days that apply
, month_days as (
SELECT [date]
  ,row_number() over (partition by year([date]),month([date]) order by date asc) as [week_num]
FROM calendar
where 1=1
and DATENAME(weekday,[date]) = @day_name
and datename(month,[date]) = @month_name
)

-- Get the dates where the occurrence matches
select [date]
from month_days
where week_num = @week_num
OPTION (MAXRECURSION 0) --Unlimited recursion; limit the number of years in parameter at the top
;

Comments

Popular posts from this blog

Continuously Monitor Folder for New Files with PowerShell as a WindowsService

Unprotect All Excel Sheets for All Workbooks in a Directory

ChromeOS Flow by Hexxeh Install to HDD