每年两个日期之间的总天数

时间:2015-05-05 15:41:57

标签: sql sql-server tsql

我目前正在进行一项查询,以按年计算日期范围之间的总天数

表:

Start Date    End Date  
01/01/2013    04/30/2014  
11/01/2014    05/31/2015  
06/01/2015    12/31/2015

我的预期结果。

2013 - 365  
2014 - 180  
2015 - 365  

我可以使用临时表在多个步骤中执行此操作。有没有简单的方法来进行这种计算。

由于

2 个答案:

答案 0 :(得分:0)

好的,试试这个:

SELECT * INTO #yourTable
FROM
(
    SELECT CAST('01/01/2013' AS DATE),CAST('04/30/2014' AS DATE) UNION ALL 
    SELECT '11/01/2014','05/31/2015' UNION ALL  
    SELECT '06/01/2015','12/31/2015'
) A(StartDate,EndDate);

DECLARE @MaxEndDate DATE = (SELECT MAX(EndDate) FROM #yourTable);

WITH CTE_Dates
AS
(
    SELECT MIN(StartDate) dates
    FROM #yourTable

    UNION ALL

    SELECT DATEADD(Day,1,dates)
    FROM CTE_Dates
    WHERE dates < @MaxEndDate
)

SELECT YEAR(dates) yr,COUNT(DATES) cnt
FROM #yourTable A
CROSS APPLY(SELECT dates FROM CTE_Dates WHERE dates BETWEEN A.startDate AND A.EndDate) CA
GROUP BY YEAR(dates)
OPTION (MAXRECURSION 0)

答案 1 :(得分:-1)

PRINT DATEDIFF(DAY, '1/1/2013', '4/30/2014')

这将为您提供所需的信息。只需重复所需的所有日期。

这给出了两个日期之间跨越午夜边界的次数。如果您在计数中包含两个日期,则可能决定需要添加一个 - 或者如果您不想包含任何一个日期,则减去一个日期。