>> DECLARE @StartDate datetime >> DECLARE @EndDate datetime >> >> SET @StartDate = '2014-01-23T09:15:00' >> SET @EndDate = '2014-01-29T13:45:00' >> >> >> >>DECLARE @Test TABLE (StartDate datetime, EndDate datetime NULL) >> >>INSERT INTO @Test VALUES ('2014-01-23T08:00:00', '2014-01-23T12:00:00') >>INSERT INTO @Test VALUES ('2014-01-23T13:00:00', '2014-01-23T17:00:00') >>INSERT INTO @Test VALUES ('2014-01-24T08:00:00', '2014-01-24T12:00:00') >>INSERT INTO @Test VALUES ('2014-01-24T13:00:00', '2014-01-24T17:00:00') >>INSERT INTO @Test VALUES ('2014-01-27T08:00:00', '2014-01-27T12:00:00') >>INSERT INTO @Test VALUES ('2014-01-27T13:00:00', '2014-01-27T17:00:00') >>INSERT INTO @Test VALUES ('2014-01-28T08:00:00', '2014-01-28T12:00:00') >>INSERT INTO @Test VALUES ('2014-01-28T13:00:00', '2014-01-28T17:00:00') >>INSERT INTO @Test VALUES ('2014-01-29T13:00:00', '2014-01-29T17:00:00') >> >>SELECT SUM(Test1) AS Test1 >>FROM ( >>SELECT *, DATEDIFF(SECOND, CASE WHEN StartDate > @StartDate >> THEN StartDate >> ELSE @StartDate END, >> CASE WHEN EndDate < @EndDate >> THEN EndDate >> ELSE @EndDate END)/3600.0 AS Test1 >>FROM @Test) Tst >> >>SELECT SUM(Test1) AS Test1 >>FROM ( >>SELECT *, DATEDIFF(SECOND, StartDate, EndDate)/3600.0 AS Test1 >>FROM @Test) Tst >>>
>DECLARE @Start DATETIME >DECLARE @End DATETIME > >SET @Start='2014-01-23 09:15:00' >SET @End='2014-01-29 13:45:00' > >SELECT SUM(Temp.SecondValue)/3600 AS HourValue >FROM (SELECT DATEDIFF(SECOND, > CASE WHEN BusinessTime.Start>@Start THEN BusinessTime.Start ELSE @Start END, > CASE WHEN BusinessTime.[End]<@End THEN BusinessTime.[End] ELSE @End END) AS SecondValue > FROM BusinessTime > WHERE BusinessTime.Start>=@Start AND BusinessTime.Start<=@End AND > BusinessTime.[End]>=@Start AND BusinessTime.[End]<=@End) Temp >>
WHERE (BusinessTime.Start>=@Start AND BusinessTime.Start<=@End) OR (BusinessTime.[End]>=@Start AND BusinessTime.[End]<=@End)) Temp