Я пытаюсь получить timediff со своего стола и конвертировать его в часы (это для почасовой оплаты)
SELECT TIME_TO_SEC (TIMEDIFF (endDate, startDate)) / 3600 FROM tasks>
- LOAD DATA LOCAL INFILE не работает с php 5.5 с использованием PDO
- Как эхо случайных строк из базы данных?
- Как подключиться к двум таблицам в MYSQL с одинаковым идентификатором в нескольких строках
- Результат php json_encode mysql
- Установка Magento 2.0.2 на общий сервер - застрял на 66%
- Когда рекомендуются наиболее рекомендуемые времена использования mysql_real_escape_string ()
где endDate и startDate находятся в формате даты и времени
есть ли другой способ (более эффективный) для выполнения этой задачи? Благодаря !
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
если у вас есть секунды, которые вы можете преобразовать, как хотите, или что и часы (..) не будут использовать его, когда я сравню, потому что это всегда поводная ценность