Подтвердить что ты не робот

Mysql timediff до часов

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

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

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

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

4b9b3361

Ответ 1

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, startDate, endDate) AS hours_different
FROM tasks

Ответ 2

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

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

Ответ 3

HOUR(TIMEDIFF(endDate, startDate))

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

Ответ 4

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.

Ответ 5

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

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

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

Ответ 6

например: 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. Я думаю, что первый из них наиболее эффективен. Спасибо!

Ответ 7

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

Hour(TIMEDIFF(date1,date2)) as Hour1

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

Minute(TIMEDIFF(date1,date2)) as Minute1

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

Second(TIMEDIFF(date1,date2)) as Second1

Ответ 8

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  

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

Ответ 9

Вы можете использовать mysql funcion timestampdiff, как показано ниже

TIMESTAMPDIFF(HOUR, '2018-06-01 00:00:00', '2018-06-01 12:00:00') 

Ответ 10

TIMEDIFF(endDate, startDate) / 10000