I have to calculate the difference in hours (decimal type) between two dates in SQL Server 2008.
I couldn't find any useful technique to convert datetime to decimal with 'CONVERT' on MSDN.
Can anybody help me with that?
UPDATE:
To be clear, I need the fractional part as well (thus decimal type). So from 9:00 to 10:30 it should return me 1.5.
Or use this for 2 decimal places:
DATEDIFF(hour, start_date, end_date)
will give you the number of hour boundaries crossed betweenstart_date
andend_date
.If you need the number of fractional hours, you can use
DATEDIFF
at a higher resolution and divide the result:The documentation for
DATEDIFF
is available on MSDN:http://msdn.microsoft.com/en-us/library/ms189794%28SQL.105%29.aspx
SELECT DATEDIFF(hh, firstDate, secondDate) FROM tableName WHERE ...
Result = 1.00
You are probably looking for the DATEDIFF function.
Where you code might look like this:
DATEDIFF ( hh , startdate , enddate )
Just subtract the two datetime values and multiply by 24:
a test script might be:
This works because all datetimes are stored internally as a pair of integers, the first integer is the number of days since 1 Jan 1900, and the second integer (representing the time) is the number of (1) ticks since Midnight. (For SmallDatetimes the time portion integer is the number of minutes since midnight). Any arithmetic done on the values uses the time portion as a fraction of a day. 6am = 0.25, noon = 0.5, etc... See MSDN link here for more details.
So Cast((@Dt2 - @Dt1) as Float) gives you total days between two datetimes. Multiply by 24 to convert to hours. If you need total minutes, Multiple by Minutes per day (24 * 60 = 1440) instead of 24...
NOTE 1: This is not the same as a dotNet or javaScript tick - this tick is about 3.33 milliseconds.