我不知道如果这些日子是每周或连续的,下面是如何处理这两种情况的例子。
DECLARE
@StartDate date = '20160801',-- - 1st Aug 2016
@EndDate date = '20160930', --30th Sept 2016
@MaxCourses tinyint = 5,
@startDay varchar(10) = 'Tuesday';
-- if you need the next 5 tuesdays
WITH
E1(N) AS (SELECT 1 FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) x(x)),
iTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))-1 FROM E1 a, E1 b, E1 c),
calendar(d) AS
(
SELECT TOP (DATEDIFF(DAY,@StartDate,@EndDate)) DATEADD(DAY,N,@startDate)
FROM itally
)
SELECT TOP(@MaxCourses) d
FROM calendar
WHERE DATENAME(WEEKDAY,d) = @startDay;
-- if you need the next 5 days
WITH
E1(N) AS (SELECT 1 FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) x(x)),
iTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))-1 FROM E1 a, E1 b, E1 c),
calendar(N,d) AS
(
SELECT TOP (DATEDIFF(DAY,@StartDate,@EndDate)) N, DATEADD(DAY,N,@startDate)
FROM itally
),
md(d1) AS (SELECT MIN(d) FROM calendar WHERE DATENAME(WEEKDAY,d) = @startDay)
SELECT TOP (@MaxCourses) d = DATEADD(day,N,d1)
FROM calendar CROSS JOIN md;
请出示样品输出 – TheGameiswar
2016年2月8日 2016年9月8日 16/08/2016 23/08/2016 30/08/2016 – Dough