Simple way is:
DECLARE @timeDiff TABLE(StartDate datetime, closeDate DATETIME)
insert into @timeDiff
SELECT '2012-12-18 08:00:00','2012-12-18 10:00:00' union all
SELECT '2012-12-18 07:00:00','2012-12-18 10:00:00' union all
SELECT '2012-12-18 07:00:00','2012-12-18 20:00:00' union all
SELECT '2012-12-18 08:00:00','2012-12-19 10:00:00' union all
SELECT '2012-12-18 07:00:00','2012-12-20 10:00:00'
;with cte AS
(
SELECT CASE WHEN DATEPART(HH, startDate) < 8 THEN 8 ELSE DATEPART(HH, startDate) END startTime,
CASE WHEN DATEPART(HH, closeDate) >= 18 THEN 18 ELSE DATEPART(HH, closeDate) END EndTime,
DATEDIFF(dd, startDATE, CloseDate) noOfDays,
StartDate,
closeDate
FROM @timeDiff
)SELECT (endtime *(noOfDays+1) - startTime) , StartDate, closeDate FROM cte
For more accuracy check this link
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=176582
--
Chandu