/ Published in: SQL
Expand |
Embed | Plain Text
declare @numofweeks int = 0, @Date date = getdate(), @FirstDayOfWeek tinyint = 6 SET DATEFIRST @FirstDayOfWeek; Declare @EndDate date Declare @BeginDate date IF @numofweeks < 0 begin SET @BeginDate = dateadd(week,@numofweeks,dateadd(day,-(DATEPART(WEEKDAY,@Date)-1),@Date)) end else begin SET @BeginDate = dateadd(day,-(DATEPART(WEEKDAY,@Date)-1),@Date) end; WITH wk AS ( SELECT CAST (7 AS int) AS n, @BeginDate AS BeginDate,DATEADD(day,6,@BeginDate) AS EndDate UNION ALL SELECT N+7, DATEADD(DAY,(1),EndDate),DATEADD(DAY,(7),EndDate) FROM wk WHERE n < 7*ABS(@numofweeks) ) SELECT ROW_NUMBER() over(ORDER BY BeginDate) AS Week,BeginDate,datename(weekday,BeginDate) AS BeginDay,EndDate,DATENAME(weekday,EndDate) AS EndDay FROM wk ORDER BY BeginDate;
You need to login to post a comment.
