This should help you
DECLARE@table TABLE
(
IDINT,
StartDateDATETIME,
EndDateDATETIME
)
INSERT@table( ID, StartDate, EndDate )
SELECT1, '2013-02-17 10:33:10', '2013-02-17 20:14:40' UNION ALL
SELECT1, '2013-02-13 12:42:55', '2013-02-14 14:30:50' UNION ALL
SELECT1, '2013-02-12 15:04:32', '2013-02-15 12:22:25' UNION ALL
SELECT1, '2013-02-16 20:08:18', '2013-02-18 02:10:10'
SELECTT.ID, T.StartDate, T.EndDate,
CASE
WHEN DATEADD( DAY, DATEDIFF( DAY, T.StartDate, T.EndDate ), T.StartDate ) <= T.EndDate
THEN DATEDIFF( DAY, T.StartDate, T.EndDate )
ELSE DATEDIFF( DAY, T.StartDate, T.EndDate ) - 1
END + --====================Gives you the days
(
CASE
WHEN DATEADD( MINUTE, DATEDIFF( MINUTE, T.StartDate, T.EndDate ), T.StartDate ) <= T.EndDate
THEN DATEDIFF( MINUTE, T.StartDate, T.EndDate )
ELSE DATEDIFF( MINUTE, T.StartDate, T.EndDate ) - 1
END % ( 60 * 24 )
) / 1440.00 AS Result --===============Gives you the hours in decimals
FROM@table AS T
Edit: Added some comments and changed the query( "<" condition changed to "<=" )
How to post data/code on a forum to get the best help - Jeff Moden
http://www.sqlservercentral.com/articles/Best+Practices/61537/