Est-il possible de prendre la différence entre les deux datetime
dans sql server?
Par exemple, mes dates sont
2010-01-22 15:29:55.090
2010-01-22 15:30:09.153
Alors, le résultat devrait être 14.063 seconds
.
Est-il possible de prendre la différence entre les deux datetime
dans sql server?
Par exemple, mes dates sont
2010-01-22 15:29:55.090
2010-01-22 15:30:09.153
Alors, le résultat devrait être 14.063 seconds
.
Juste un bémol à ajouter au sujet de l'DateDiff, il compte le nombre de fois que vous passez la frontière, vous indiquez que vos unités, est donc soumis à des problèmes si vous êtes à la recherche pour un laps de temps précis. par exemple
select datediff (m, '20100131', '20100201')
donne une réponse de 1, parce qu'il a franchi les limites de janvier à février, donc, même si la durée est de 2 jours, datediff doit retourner une valeur de 1 - la traversée de 1 date limite.
select datediff(mi, '2010-01-22 15:29:55.090' , '2010-01-22 15:30:09.153')
Donne une valeur de 1, encore une fois, il est passé à la minute limites d'une seule fois, donc, même si elle est d'environ 14 secondes, il serait retourné comme une seule minute lors de l'utilisation de Minutes que les unités.
SELECT DATEDIFF (MyUnits, '2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')
Remplacer "MyUnits" basé sur DATEDIFF sur MSDN
Il y a un certain nombre de façons de regarder une date de différence, et plus encore lorsque l'on compare les dates/heures. Voici ce que j'utilise pour obtenir la différence entre deux dates au format "HH:MM:SS":
ElapsedTime AS
RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) / 3600 AS VARCHAR(2)), 2) + ':'
+ RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 3600 / 60 AS VARCHAR(2)), 2) + ':'
+ RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 60 AS VARCHAR(2)), 2)
J'ai utilisé ce pour une colonne calculée, mais vous pourrait trivialement réécrire sous la forme d'un UDF de requête ou de calcul. Notez que cette logique arrondit les fractions de secondes; 00:00.00 00:00.999 est considéré comme zéro secondes, et affiche "00:00:00".
Si vous pensez que les délais peuvent être plus que quelques jours de temps, ce commutateurs de code D:HH:MM:SS en cas de besoin:
ElapsedTime AS
CASE WHEN DATEDIFF(S, StartDate, EndDate) >= 359999
THEN
CAST(DATEDIFF(S, StartDate, EndDate) / 86400 AS VARCHAR(7)) + ':'
+ RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 86400 / 3600 AS VARCHAR(2)), 2) + ':'
+ RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 3600 / 60 AS VARCHAR(2)), 2) + ':'
+ RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 60 AS VARCHAR(2)), 2)
ELSE
RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) / 3600 AS VARCHAR(2)), 2) + ':'
+ RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 3600 / 60 AS VARCHAR(2)), 2) + ':'
+ RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 60 AS VARCHAR(2)), 2)
END
En interne dans SQL Server dates sont stockées en tant que 2 nombres entiers. Le premier entier est le nombre de dates avant ou après la date de base (1900/01/01). Le deuxième entier stocke le nombre de tops d'horloge après minuit, à chaque itération est 1/300 de seconde.
De ce fait, je trouve souvent le moyen le plus simple pour comparer les dates, c'est tout simplement de soustraire eux. Cela gère 90% de mon cas d'utilisation. E. g.,
select date1, date2, date2 - date1 as DifferenceInDays
from MyTable
...
Quand j'ai besoin d'une réponse dans d'autres unités de jours, je vais utiliser DateDiff.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.