在SQL中的日期范围内获取每一天的日期

时间:2014-09-08 11:46:05

标签: sql tsql date

我正在寻找一种方法来获取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';

需要得到例如该列表中的每个星期一(日期)。我试着寻找一个特定的答案,但似乎找不到相关的东西。

原因是它将用于物流计划,以计算所需交货日为每周一的日期范围之间的交货日期。

1 个答案:

答案 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;