web-dev-qa-db-fra.com

Afficher uniquement les heures dans MYSQL DATEDIFF

Je suis occupé avec ça depuis des heures, mais je ne peux pas le faire fonctionner.

SQL

SELECT DATEDIFF(end_time, start_time) as `difference` FROM timeattendance WHERE timeattendance_id = '1484'

start_time =   2012-01-01   12:00:00
end_time =     2012-01-02   13:00:00

La différence est de 25 (heures). Mais la sortie que j'obtiens est de 1 (jour).

Comment puis-je obtenir les 25 heures de sortie?

31
Mossawi

Qu'en est-il de l'utilisation de TIMESTAMPDIFF ?

SELECT TIMESTAMPDIFF(HOUR, start_time, end_time) 
           as `difference` FROM timeattendance WHERE timeattendance_id = '1484'
79
FlyingMolga

Il vaut mieux utiliser TIMEDIFF au lieu de DATEDIFF car DATEDIFF convertit toutes les heures en dates avant de comparer. Après avoir exécuté TIMEDIFF, vous pouvez obtenir des heures avec la fonction HEURE.

SELECT HOUR(TIMEDIFF(end_time, start_time)) as `difference`;
7
Miroshko

Comme indiqué dans MySQL référence , DATEDIFF ne prend que des jours en compte.

Si les deux dates sont postérieures à 1970, vous pouvez soustraire des horodatages:

SELECT ( UNIX_TIMESTAMP("2012-01-02 13:00:00") - 
         UNIX_TIMESTAMP("2012-01-01 12:00:00") ) / 3600 ...

ou:

SELECT TIMEDIFF ( "2012-01-02 13:00:00", "2012-01-01 12:00:00") / 3600 ... 
4
madfriend

Vous pouvez utiliser la fonction TIMEDIFF et HOUR pour extraire simplement l'heure.

SELECT HOUR(TIMEDIFF(end_time, start_time)) as `difference` FROM timeattendance WHERE timeattendance_id = '1484'

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_hour

3
jth_92