Réponses:
Vous pouvez utiliser TIMEDIFF()les TIME_TO_SEC()fonctions et comme suit:
SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Vous pouvez également utiliser la UNIX_TIMESTAMP()fonction comme @Amber suggéré dans une autre réponse:
SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') -
UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Si vous utilisez le TIMESTAMPtype de données, je suppose que la UNIX_TIMESTAMP()solution serait légèrement plus rapide, car les TIMESTAMPvaleurs sont déjà stockées sous forme d'entier représentant le nombre de secondes depuis l'époque ( Source ). Citant les documents :
Lorsqu'elle
UNIX_TIMESTAMP()est utilisée sur uneTIMESTAMPcolonne, la fonction renvoie directement la valeur d'horodatage interne, sans conversion implicite «chaîne en horodatage Unix».Gardez à l'esprit que
TIMEDIFF()le type de données de retourTIME.TIMEles valeurs peuvent aller de «-838: 59: 59» à «838: 59: 59» (environ 34,96 jours)
Que diriez-vous de "TIMESTAMPDIFF":
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
str_to_date(date_column, '%m/%d/%Y')dans la fonction TIMESTAMPDIFF pour la colonne dont la mise en forme doit être corrigée.
TIME_TO_SECatteint au maximum alors 3020399que cela renvoie la valeur correcte.
Notez que la TIMEDIFF()solution ne fonctionne que lorsque les intervalles datetimessont inférieurs à 35 jours !
TIMEDIFF()renvoie un TIMEtype de données et la valeur maximale pour TIME est 838: 59: 59 heures (= 34,96 jours)
unitparamètre surSECOND.