Mysql timediff до часов
Я пытаюсь получить timediff из своего стола и преобразовать его в часы (это для почасовой оплаты)
SELECT TIME_TO_SEC (TIMEDIFF (endDate, startDate))/3600 FROM tasks >
где endDate и startDate находятся в формате datetime
существует ли другой способ (более эффективный) для выполнения этой задачи?
Спасибо!
Ответы
Ответ 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