Domanda

Ho appena cercato di inserire due righe con il datetime corrente e quindi calcolato il tempo trascorso da quella data. Qui ci sono le righe dal mio tavolo dopo due inserimenti e usando ora () per impostare il timestamp:

mysql> select * from pendingActivations;
+--------+------------+---------------------+
| userId | code       | timestamp           |
+--------+------------+---------------------+
|      2 | aaa        | 2010-08-23 17:04:02 |
|   2345 | alkfjkla23 | 2010-08-23 16:59:53 |
+--------+------------+---------------------+

A pochi minuti dopo l'inserimento della riga con userId uguale a 2, ho eseguito il seguente comando che speravo mi avrebbe dato il tempo trascorso dal timestamp per ogni riga. Ecco i risultati:

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 |
+--------+------------+---------------------+----------------+

mi chiedo come la seconda fila ha quel valore enorme elapsedSeconds che indica che esattamente 1 ora, 16 minuti e 25 secondi era passato, anche se si vede facilmente che solo circa 5 minuti erano passati da allora.

Questa è la struttura della tabella:

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    |       | 
+-----------+-------------+------+-----+---------+-------+

Tutte le idee e / o spiegazioni?

È stato utile?

Soluzione

Non riesco a spiegare il problema, ma ho il sospetto l'operazione - restituisce il risultato in un formato imprevisto (forse compreso microsecondi o decimi?)

I userebbe TIMEDIFF() .

  

ritorna expr1 - expr2 espressa come un valore di tempo. espr1 e espr2 sono ora o data-e-time espressioni, ma entrambi devono essere dello stesso tipo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top