У меня есть столовые экзамены с полями:
id - int(10) UNSIGNED,
name - varchar(255)
duration - int(10) UNSIGNED
с записями:
Exam A 3600
Exam B 3600
и необходимо суммировать их общую продолжительность, но результат неверен при попытке преобразовать их в UNIXTIME с помощью этого кода:
SELECT
id,
name,
FROM_UNIXTIME(SUM(duration), '%H:%i') AS totalDuration
FROM
exams
Итак, общий результат: 04 часа: 00 минут.
Угадайте, проблема в конвертации?






Сделать это можно так:
SELECT
id,
name,
TIME_FORMAT(SEC_TO_TIME(SUM(duration)),'%Hh %im')
FROM
exams
Поскольку это не время UNIX, это промежуток времени в секундах
Спасибо, логика простая и вы правы, еще не время UNIX :)
Так возникают проблемы при работе с большими числами. Например, при наличии 2216 часов 66 минут MySQL показывает только 839 часов 59 минут, потому что SEC_TO_TIME имеет ограничение: от -839: 59: 59 до 839: 59: 59
это продолжительность в секундах и почему вам нужно преобразовать в UNIXTIME? Кажется, вам нужно преобразовать секунды в часы, не так ли?