DECLARE @dt1 datetimeDECLARE @dt2 datetimeSELECT @dt1 = '20090316 12:00:00.000', @dt2 = GETDATE()SELECT CONVERT(varchar(12), DATEADD(ms, DATEDIFF(ms, @dt1, @dt2), 0), 114)
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [dbo].[zTest_SP_DATEDIFF_TIMER] AS-- CREATED: 18/08/2009 by Gav B.-- DESCRIPTION: This procedure calculates the difference between 2 dates right down to the millisecond (0.003sec accuracy in SQL2005, untested in 2008)---- NOTES:-- @I_OverFlows = DATEDIFF(ms,GETDATE()-24.49,GETDATE())-- This represents the maximum of approx 24 Days 11 Hours 50 Mins before causing an "overflow at runtime".-- RAND function used below just to give a random number for demonstration purposes.-- Unknown at time of writting WHY the combination of % and / works, but it seems to quite well...DECLARE @I INTSET @I = DATEDIFF(ms,GETDATE()-RAND()*24,GETDATE())SELECTconvert(varchar(10), (@I/86400000)) + ' Days ' + convert(varchar(10), ((@I%86400000)/3600000)) + ' Hours '+convert(varchar(10), (((@I%86400000)%3600000)/60000)) + ' Mins '+convert(varchar(10), ((((@I%86400000)%3600000)%60000)/1000)) + ' sec ' +convert(varchar(10), (((@I%86400000)%3600000)%1000)) + ' ms ' AS [DD:HH:MM:SS:MS]
SELECT convert(varchar(10), @I/86400000) + ' Days ' + convert(varchar(10), (@I%86400000)/3600000) + ' Hours '+ convert(varchar(10), (@I%3600000)/60000) + ' Mins '+ convert(varchar(10), (@I%60000)/1000) + ' sec ' + convert(varchar(10), @I%1000) + ' ms ' AS [DD:HH:MM:SS:MS]
select *, Days = datediff(dd,0,DateDif), Hours = datepart(hour,DateDif), Minutes = datepart(minute,DateDif), Seconds = datepart(second,DateDif), MS = datepart(ms,DateDif)from ( select DateDif = EndDate-StartDate, aa.* from ( -- Test Data Select StartDate = convert(datetime,'20090213 02:44:37.923'), EndDate = convert(datetime,'20090715 13:24:45.837') ) aa ) a
DateDif StartDate EndDate Days Hours Minutes Seconds MS----------------------- ----------------------- ----------------------- ---- ----- ------- ------- ---1900-06-02 10:40:07.913 2009-02-13 02:44:37.923 2009-07-15 13:24:45.837 152 10 40 7 913(1 row(s) affected)