2010-09-01 19 views
40

Illustrerò quello che vorrei ottenere nel seguente esempio:Come ottenere la differenza tra due date arrotondati alle ore

'2010-09-01 03:00:00' - '2010-09-01 00:10:00' 

Utilizzando TIMEDIFF(), otteniamo 2 come risultato. Ciò significa che non considera i 50 minuti rimasti.

In questo caso, quello che mi piacerebbe ottenere è: 50 (minuti)/60 = 0,83 periodo. Pertanto, il risultato dovrebbe essere 2,83 e non 2.

+2

Stai trasmettendo un numero intero? Dovresti ottenere un risultato temporale, come "2:50:00". – Matthew

risposta

89
select time_to_sec(timediff('2010-09-01 03:00:00', '2010-09-01 00:10:00'))/3600; 

+-----------------------------------------------------------------------------+ 
| time_to_sec(timediff('2010-09-01 03:00:00', '2010-09-01 00:10:00'))/3600 | 
+-----------------------------------------------------------------------------+ 
|                  2.8333 | 
+-----------------------------------------------------------------------------+ 
+2

+1: Ben fatto! –

+0

Grazie. Funziona! –

+8

La soluzione timediff ha un problema: non può avere un valore superiore a 839 ore (meno 1 secondo). Quindi non sarà in grado di trovare una differenza con più di ~ 35 giorni –

10

Si potrebbe provare la seguente:

time_format(timediff(max(l.fecha), min(l.fecha)),'%H:%m') //Hora y minutos 
+4

Este sitio es Inglés. Su ayuda se agradece, pero por favor, tratar de publicar las respuestas it Inglés. – Jules

+4

la parte importante di esso era (no hablo espan ~ ol, ma ho capito la risposta hsi): -/ – Mawg

+0

Hai ripubblicato nel quartiere sbagliato, ma le tue intenzioni sono comunque apprezzate. Tome su voto a favore. – DragShot

7

Usa TIMESTAMPDIFF per numero esatto di ore:

SELECT 
     b.`Start_Date`, 
     b.`End_Date`, 
     TIMESTAMPDIFF(HOUR, b.`Start_Date`, b.`End_Date`) AS `HOURS` 
FROM my_table b; 
0

MySQL ottenere il numero di ore tra i timestamp:

select timestampdiff(second,'2010-09-01 00:10:00', '2010-09-01 03:00:00')/3600; 
+0

Perché non 'timestampdiff (hour, '2010-09-01 00:10:00', '2010-09-01 03:00:00')'? – codeforester

+0

Non tiene conto dei minuti. Quello che hai suggerito restituisce risposta come 2, mentre la soluzione di cui sopra dà 2,83 (0,83 ore è la differenza di 50 minuti) – bangde

0

Se si utilizza timestamp, questa potrebbe essere la soluzione in MySQL usando SQL.

SELECT TIMESTAMPDIFF(HOUR, '2010-11-29 13:13:55', '2010-11-29 13:16:55') as newtable; 

| newtable | 

7 

1 row in set (0.01 sec) 
Problemi correlati