web-dev-qa-db-fra.com

Différence MySql entre deux horodatages en secondes?

Est-il possible de calculer la différence entre deux horodatages dans Mysql et d'obtenir le résultat de sortie en quelques secondes? comme 2010-11-29 13:16:55 - 2010-11-29 13:13:55 devrait donner 180 secondes.

Je vous remercie

36
Good Guy

Utilisez fonction UNIX_TIMESTAMP pour convertir le DATETIME en valeur en secondes, à partir du 1er janvier 1970:

SELECT UNIX_TIMESTAMP('2010-11-29 13:16:55') - UNIX_TIMESTAMP('2010-11-29 13:13:55') as output

Résultat:

output
-------
180

Un moyen facile de gérer si vous n'êtes pas sûr de la valeur qui est plus grande que l'autre - utilisez la fonction ABS :

SELECT ABS(UNIX_TIMESTAMP(t.datetime_col1) - UNIX_TIMESTAMP(t.datetime_col2)) as output
31
OMG Ponies

Je ne pense pas que la réponse acceptée soit une bonne solution universelle!

Cela est dû au fait que la fonction UNIX_TIMESTAMP () échoue pour les DATES antérieures au 01/01/1970 (et pour les dates très éloignées à l'aide d'entiers 32 bits). Cela peut se produire facilement le jour de la naissance de nombreuses personnes vivantes.

Une meilleure solution est:

SELECT TIMESTAMPDIFF(SECOND, '2010-11-29 13:13:55', '2010-11-29 13:16:55')

Qui peut être modifié pour renvoyer le DAY YEAR MOIS HEURE et MINUTE aussi!

146
OderWat

La méthode TIMESTAMPDIFF ne fonctionne qu'avec le format datetime. Si vous voulez la différence entre seulement deux fois comme '11: 10: 00 'moins '10: 20: 00' alors utilisez

select TIME_TO_SEC('11:10:00')-TIME_TO_SEC('10:20:00')
2
Santhosh Gandhe