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 TIMESTAMP
type de données, je suppose que la UNIX_TIMESTAMP()
solution serait légèrement plus rapide, car les TIMESTAMP
valeurs 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 uneTIMESTAMP
colonne, 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
.TIME
les 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_SEC
atteint au maximum alors 3020399
que cela renvoie la valeur correcte.
Notez que la TIMEDIFF()
solution ne fonctionne que lorsque les intervalles datetimes
sont inférieurs à 35 jours !
TIMEDIFF()
renvoie un TIME
type de données et la valeur maximale pour TIME est 838: 59: 59 heures (= 34,96 jours)
unit
paramètre surSECOND
.