MySQL: Étrange résultat lorsque la valeur de soustraction de la date et de NOW ()
-
30-09-2019 - |
Question
Je viens d'essayer d'insérer deux lignes avec le datetime courant et calcule ensuite le temps écoulé depuis cette date. Voici les lignes de ma table après deux insertions et en utilisant la fonction NOW () pour régler l'horodatage:
mysql> select * from pendingActivations;
+--------+------------+---------------------+
| userId | code | timestamp |
+--------+------------+---------------------+
| 2 | aaa | 2010-08-23 17:04:02 |
| 2345 | alkfjkla23 | 2010-08-23 16:59:53 |
+--------+------------+---------------------+
Quelques minutes après l'insertion de la rangée avec userId égal à 2, I exécuté la commande suivante qui je l'espère, me donner le temps écoulé à partir de l'estampille temporelle pour chaque ligne. Voici les résultats:
mysql> select userId, code, timestamp, NOW() - timestamp as elapsedSeconds from pendingActivations;
+--------+------------+---------------------+----------------+
| userId | code | timestamp | elapsedSeconds |
+--------+------------+---------------------+----------------+
| 2 | aaa | 2010-08-23 17:04:02 | 136.000000 |
| 2345 | alkfjkla23 | 2010-08-23 16:59:53 | 4585.000000 |
+--------+------------+---------------------+----------------+
Je me demande comment la deuxième ligne a cette énorme valeur elapsedSeconds qui indique exactement 1 heure, 16 minutes et 25 secondes était passé, mais il est facile de voir que seulement environ 5 minutes se sont écoulées depuis.
Voici la structure de la table:
mysql> describe pendingActivations;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| userId | int(11) | NO | PRI | NULL | |
| code | varchar(32) | NO | UNI | NULL | |
| timestamp | datetime | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
Toutes les idées et / ou explications?
La solution
Je ne peux pas expliquer le problème, mais je soupçonne que l'opération de -
renvoie le résultat dans un format inattendu (peut-être y compris microsecondes ou dixièmes?)
J'utiliser TIMEDIFF()
.
renvoie
expr1
-expr2
exprimée en valeur temporelle. expr1 et expr2 sont temps ou expressions date et à temps, mais les deux doivent être du même type.