|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-09-12 : 11:02:02
|
[code]DECLARE @From DATETIME, @To DATETIMESELECT @From = '20070907 16:00', @To = '20070910 10:00';WITH Yak (theDate, theWeekday, theSeconds)AS ( SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @From), 0), DATENAME(DW, @From), CASE WHEN CONVERT(CHAR(8), @From, 108) < '09:00:00' THEN 28800 WHEN CONVERT(CHAR(8), @From, 108) > '17:00:00' THEN 0 ELSE 61200 - DATEDIFF(SECOND, DATEADD(DAY, DATEDIFF(DAY, 0, @From), 0), @From) END UNION ALL SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @To), 0), DATENAME(DW, @To), CASE WHEN CONVERT(CHAR(8), @To, 108) < '09:00:00' THEN 0 WHEN CONVERT(CHAR(8), @To, 108) > '17:00:00' THEN 28800 ELSE DATEDIFF(SECOND, DATEADD(DAY, DATEDIFF(DAY, 0, @To), 0), @To) - 32400 END UNION ALL SELECT 1 + theDate, DATENAME(DW, 1 + theDate), CASE WHEN DATENAME(DW, 1 + theDate) IN ('Saturday', 'Sunday') THEN 0 ELSE 28800 END FROM Yak WHERE theDate < @To - 2)SELECT SUM(theSeconds) / 60.0 AS theMinutesFROM YakOPTION (MAXRECURSION 0)--SELECT theWeekday,-- COUNT(*) AS theOccurence,-- SUM(theSeconds) / 3600.0 AS theHours--FROM Yak--GROUP BY theWeekday--OPTION (MAXRECURSION 0)[/code] E 12°55'05.25"N 56°04'39.16" |
 |
|