我目前正在进行一项查询,以按年计算日期范围之间的总天数
表:
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
我可以使用临时表在多个步骤中执行此操作。有没有简单的方法来进行这种计算。
由于
答案 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')
这将为您提供所需的信息。只需重复所需的所有日期。
这给出了两个日期之间跨越午夜边界的次数。如果您在计数中包含两个日期,则可能决定需要添加一个 - 或者如果您不想包含任何一个日期,则减去一个日期。