我正在寻找一种方法来获取SQL中两个日期之间某一天的实例列表。
我有一个范围:
DECLARE @ViewStartDate DATETIME
DECLARE @ViewEndDate DATETIME
SET @ViewStartDate = '2014-09-08 00:00:00.000';
SET @ViewEndDate = '2014-09-30 00:00:00.000';
需要得到例如该列表中的每个星期一(日期)。我试着寻找一个特定的答案,但似乎找不到相关的东西。
原因是它将用于物流计划,以计算所需交货日为每周一的日期范围之间的交货日期。
答案 0 :(得分:0)
您可以使用以下查询。 cte的第一部分是在startdate之后找到下一个星期一。然后继续添加一周直到结束日期。
;WITH Dates([Date])
AS
(
--If the start date is sunday or monday
SELECT CASE WHEN DATEPART(WEEKDAY,@ViewStartDate) <=2
--Then the monday of that week
THEN DATEADD(WEEK, DATEDIFF(WEEK, 1, @ViewStartDate), 0)
ELSE
-- Mondy of the next week
DATEADD(WEEK,1,DATEADD(WEEK, DATEDIFF(WEEK, 0, @ViewStartDate), 0))
END
UNION ALL
-- Loop by joining the CTE Dates, until the date < @ViewEndDate
SELECT DATEADD(WEEK, 1,Date)
FROM Dates
WHERE DATEADD(WEEK, 1,Date) <= @ViewEndDate
)
SELECT [Date]
FROM Dates;