web-dev-qa-db-fra.com

Différence en minutes de deux champs horaires dans MySQL

J'ai mis en place ma base de données MySQL avec le champ 'time'

Ce n'est pas HH: MM dans le sens traditionnel, c'est le moment où un événement s'est produit, donc un événement avec la valeur de 5:45 s'est produit avec 5 minutes 45 secondes dans un match. 12:25 s'est produit avec 12 minutes et 25 secondes, etc.

Je voudrais pouvoir connaître le temps total écoulé, donc si j'ai un événement qui s'est produit à 12h25 et que le prochain événement s'est produit à 5h45, je veux pouvoir obtenir la différence, qui serait égale à 6h40. Ensuite, je voudrais l'exprimer sous forme décimale, dans ce cas 6.67.

Est-ce possible?

Merci d'avance.

28
NeilG

Utilisez simplement

TIMEDIFF(fromtime, totime):

SELECT TIMEDIFF("12:25", "5:45");

Si vous avez besoin d'une décimale, utilisez TIME_TO_SEC()/3600 (cela suppose que vous l'avez passé en secondes, mais le format dans lequel vous stockez les heures est vague et SQL les interprétera probablement comme HH: MM - vous pouvez résoudre ce problème avec CONCAT("00:",MinuteSecondField) peut-être?) - alors vous pouvez utiliser TIME_TO_SEC()/60, qui est plus correct)

29
Shawn

Pour moi, cela a fonctionné:

TIMESTAMPDIFF(MINUTE, T0.created, T0.modified)

Référence: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff

26
A T

J'avais besoin de pareil. Deux fonctions utiles: TIME_TO_SEC et SUBTIME .

par exemple. si vos champs horaires étaient des heures HH: MM normales,

SELECT (TIME_TO_SEC(end_time) - TIME_TO_SEC(start_time))/60 AS `minutes` 

Dans votre cas, si je comprends bien, les temps sont en arrière, à savoir. 12:00<6:00 donc votre heure_fin et heure_démarrage devraient être échangées.

Si vous vouliez la sortie en HH: MM: SS, vous pourriez le faire

SELECT SUBTIME(end_time, start_time)
18
artfulrobot

J'ai utilisé UNIX_TIMESTAMP (event1) -UNIX_TIMESTAMP (event2), ce qui vous donne des secondes entre les événements. Divisez-le par 60,0 et vous obtiendrez une décimale selon vos besoins. Cette solution suppose que vos colonnes sont des valeurs compatibles avec la date. Cela fonctionnera très rapidement s'il s'agit de TIMESTAMPs.

MISE À JOUR: Cette solution fonctionne uniquement avec les types de données d'horodatage, pas les types de données temporels comme dans la question d'origine.

3
Alex Pakka