• Here is my solution. Give it a test. Oh, with the values given by the OP, I get 12:03 not 12:07.

    DECLARE @StartDate DATETIME,

    @EndDate DATETIME;

    SET @StartDate = '2012-05-14 12:07:00.000';

    SET @EndDate = '2012-05-15 15:40:34.497';

    DECLARE @ElapsedTime INT; -- Elpased Time in munutes

    SELECT @ElapsedTime =

    DATEDIFF(n, @StartDate, CASE WHEN DATEDIFF(dd,@StartDate,@EndDate) = 0

    THEN @EndDate

    ELSE DATEADD(n, DATEDIFF(n, 0, CONVERT(DATETIME, '17:00:00', 108)), DATEADD(dd, DATEDIFF(dd, 0, @StartDate), 0))

    END) +

    ((DATEDIFF(dd,@StartDate,@EndDate) - 1) * DATEDIFF(n, CONVERT(DATETIME, '08:30:00', 108), CONVERT(DATETIME, '17:00:00', 108))) +

    CASE WHEN DATEDIFF(dd,@StartDate,@EndDate) <> 0

    THEN DATEDIFF(n, DATEADD(n, DATEDIFF(n, 0, CONVERT(DATETIME, '08:30:00', 108)), DATEADD(dd, DATEDIFF(dd, 0, @EndDate), 0)), @EndDate)

    ELSE 0

    END;

    SELECT @ElapsedTime, CAST(@ElapsedTime / 60 AS VARCHAR) + ':' + RIGHT('0' + CAST(@ElapsedTime % 60 AS VARCHAR),2) AS FormatTime;