Sottrazione di MySQL volte incoerente su macchine diverse
-
21-08-2019 - |
Domanda
Ho una domanda MySQL strutturato come segue:
SELECT time(c.start_time),
time(c.end_time),
time(c.end_time) - time(c.start_time) as 'opening_hours'
FROM my_shop c;
I dati di inizio e fine il tempo è rispettivamente 1970-01-01 07:00:00 e 1970-01-01 19:00:00.
Sulla mia macchina locale presente questa query restituisce:
| 07:00:00 | 19:00:00 | 12 |
Tuttavia in un computer remoto (produzione) sta tornando
| 07:00:00 | 19:00:00 | 120000 |
Tutte le idee sul perché questo potrebbe accadere e come risolvere il problema?
Entrambe le serie di dati sono identici e troppo il meglio delle mie conoscenze entrambe le installazioni di MySQL sono identici.
Ogni aiuto è molto apprezzato.
Aggiornamento:
Sembrerebbe che le versioni di MySQL sono leggermente diverse: 5.0.27-community-nt contro 5.0.51b-community-nt. Questo è probabilmente il motivo per cui.
DJT ha sollevato un buon punto di soluzione che Bill non tiene conto minuti. Così come la soluzione di questo DJT non è proprio quello che mi serve.
Quindi credo che la questione si è trasformato in modo da sottrarre due volte compreso minuti in modo tale che:
1970-01-01 19:00:00 - 1970-01-01 07:00:00 = 12
1970-01-01 19:00:00 - 1970-01-01 07:30:00 = 11.5
1970-01-01 19:00:00 - 1970-01-01 07:45:00 = 11.25
ecc.
Soluzione
Lo farei in questo modo:
SELECT TIME(c.start_time),
TIME(c.end_time),
EXTRACT(HOUR FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time)))
AS 'opening_hours'
FROM my_shop c;
Altri suggerimenti
Di solito gli stessi metodi che causano output diverso dà l'impressione che si tratta di una configurazione server diverso o versione. Io non sono davvero in grado di aiutare in questo, ma può valere la pena provare il metodo seguito nella query invece:
SELECT TIME(c.start_time), TIME(c.end_time), TIMEDIFF(TIME(c.end_time), TIME(c.start_time)) as 'opening_hours' FROM my_shop c;
Questo vi darà un timestamp formattato dell'apertura ore, minuti e secondi.
C'è una soluzione migliore di questo:
SELECT EXTRACT(HOUR FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time)))
+ ((EXTRACT(MINUTE FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time))))/60)
FROM my_shop c;