mysql timediff до часов

Я пытаюсь получить timediff со своего стола и конвертировать его в часы (это для почасовой оплаты)

SELECT TIME_TO_SEC (TIMEDIFF (endDate, startDate)) / 3600 FROM tasks>

где endDate и startDate находятся в формате даты и времени

есть ли другой способ (более эффективный) для выполнения этой задачи? Благодаря !

Solutions Collecting From Web of "mysql timediff до часов"

TIMEDIFF(endDate, startDate) в формате DateTime, настолько плоский, что для отметки времени и деления на (60 * 60)

 SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference FROM tasks 

Изменить: В качестве альтернативы, TimestampDiff также может предоставить правильное решение более элегантным способом, предоставляя его пример:

 SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'); 

И ваше решение может быть:

 SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different FROM tasks 

ПРИМЕЧАНИЕ. Самый голосующий ответ в этой цепочке НЕПРАВИЛЬНО! Использование HOUR вернет часы только как целое число. Ниже будет исправлен самый популярный ответ, чтобы вернуть часы в виде целых чисел и минут в виде десятичного числа (т.е. 6,5 часов).

 TIME_TO_SEC(TIMEDIFF(endDate, startDate))/3600 as hours 
 HOUR(TIMEDIFF(endDate, startDate)) 

может работать, если я правильно прочитаю документы.

 TIMESTAMPDIFF(HOUR, startDate, endDate) 

это лучший способ сделать это, потому что он работает с большими интервалами времени, например

 TIMESTAMPDIFF(HOUR, "2012-01-01 00:00:00", "2050-01-01 00:00:00") 

Результат: 333120

в то время как

 HOUR(TIMEDIFF("2050-01-01 00:00:00", "2012-01-01 00:00:00")) 

Результат: 838

выходит из строя.

Как мы видим в приведенном выше примере, это удивительно даже работает за пределами ограничения времени в 2038 году.

Максимальные часы, возвращаемые HOUR(TIMEDIFF(dateEnd, dateStart)) составляют 838, поскольку TIMEDIFF ограничен диапазоном, допустимым для значений TIME .

для получения Diffrence в час:

 Hour(TIMEDIFF(date1,date2)) as Hour1 

для получения Diffrence in Minute:

 Minute(TIMEDIFF(date1,date2)) as Minute1 

для получения Diffrence во втором:

 Second(TIMEDIFF(date1,date2)) as Second1 

например: startDate 2010-01-31 00:00:00, endDate 2010-01-31 19:24:22

 SELECT (UNIX_TIMESTAMP(dateFin)-UNIX_TIMESTAMP(dateDebut))/3600 hour_diff FROM tasks SELECT TIME_TO_SEC(TIMEDIFF(endDate,startDate))/3600 FROM tasks 

возвращает 19.4061, что хорошо

 SELECT TIMESTAMPDIFF(HOUR, endDate, startDate) AS hours_different FROM tasks 

Возвращает только часы, в то время как мне также нужны минуты для преобразования.

 SELECT (UNIX_TIMESTAMP(TIMEDIFF(endDate, startDate))/(60*60)) AS hours_difference FROM tasks 

возвращает 0. Я думаю, что первый из них наиболее эффективен. Благодаря !!

Вы можете использовать UNIX_TIMESTAMP для выполнения вычисления в запросе SELECT.

 SELECT (UNIX_TIMESTAMP(endDate)-UNIX_TIMESTAMP(startDate))/3600 hour_diff FROM tasks 

UNIX_TIMESTAMP преобразует datetime в число секунд с эпохи. Вы можете вычесть обе временную метку, чтобы получить разницу во втором. Разделить его на 3600 даст вам разницу в час.

 TIMEDIFF(endDate, startDate) / 10000 
 select hour(timediff('2017-01-01 00:00:00', '2017-01-01 00:01:00')); return 1 select hour(timediff('2017-01-01 00:01:00', '2017-01-01 00:00:00')); return 1 select time_to_sec(timediff('2017-01-01 00:00:00', '2017-01-01 00:00:05')); return -5 select time_to_sec(timediff('2017-01-01 00:00:00', '2017-01-01 00:00:05'))/60 as 'minutes' ; return -0.0833 

если у вас есть секунды, которые вы можете преобразовать, как хотите, или что и часы (..) не будут использовать его, когда я сравню, потому что это всегда поводная ценность