Juste soustraire les deux valeurs datetime et multiplier par 24:
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
un script de test pourrait être:
Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12'
Declare @Dt2 dateTime Set @Dt2 = getdate()
Select Cast((@Dt2 - @Dt1) as Float) * 24.0
Cela fonctionne parce que tous les datetimes sont stockées en interne comme une paire d'entiers, le premier entier est le nombre de jours depuis le 1er janvier 1900, et le second entier (représentant le heure) est le nombre de() ticks depuis minuit. (Pour SmallDatetimes, la partie de temps entier est le nombre de minutes écoulées depuis minuit). Toute arithmétique effectuée sur les valeurs utilise la partie temps en fraction de jour. 6h = 0,25, midi = 0,5, etc ... Voir MSDN link here pour plus de détails. Donc Cast ((@ Dt2 - @ Dt1) comme Float) vous donne le nombre total de jours entre deux datetime. Multiplier par 24 pour convertir en heures.Si vous avez besoin de minutes totales, Multiple par minutes par jour (24 * 60 = 1440) au lieu de 24 ...
NOTE 1: Ce n'est pas la même chose qu'une tique dotNet ou javaScript - cette coche est d'environ 3,33 millisecondes.
Excellente idée. BTW - les mêmes fonctions existent dans .Net aussi, donc c'est utile dans VB.Net ou C#. – Jeff
Pourquoi pas DATEDIFF (MINUTE, date_début, date_fin)/60.0 – irfandar
@irfandar Le 'datepart' passé à' DATEDIFF' contrôlera la résolution de la sortie. Par exemple, si 'start_date' et' end_date' différaient de 59 secondes, alors 'DATEDIFF (MINUTE, start_date, end_date)/60.0' retournerait 0, mais' DATEDIFF (second, start_date, end_date)/3600.0' retournerait 0.0163888 (59/3600). –