Общая продолжительность экзаменов

У меня есть столовые экзамены с полями:

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 минут.

Угадайте, проблема в конвертации?

это продолжительность в секундах и почему вам нужно преобразовать в UNIXTIME? Кажется, вам нужно преобразовать секунды в часы, не так ли?

Kedar Limaye 13.04.2018 11:18
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сделать это можно так:

SELECT
    id,
    name,
    TIME_FORMAT(SEC_TO_TIME(SUM(duration)),'%Hh %im')
FROM
    exams

Поскольку это не время UNIX, это промежуток времени в секундах

Спасибо, логика простая и вы правы, еще не время UNIX :)

whiskey_ 13.04.2018 11:24

Так возникают проблемы при работе с большими числами. Например, при наличии 2216 часов 66 минут MySQL показывает только 839 часов 59 минут, потому что SEC_TO_TIME имеет ограничение: от -839: 59: 59 до 839: 59: 59

whiskey_ 14.04.2018 11:43

Другие вопросы по теме