Я пытаюсь вычислить длительность от начального до конечного времени, поэтому я использую запрос SUBTIME(TIME(end_time), TIME(start_time)) as duration
, который хорошо работает, когда и start_time, и end_time находятся в одном и том же дне.
Вот код для создания MRE:
create table mre(
id int,
start_time datetime,
end_time datetime,
desired VARCHAR(40)
);
insert into mre (id, start_time, end_time, desired)
values
(1, "2019-10-10 23:59:59", "2019-10-11 00:01:01", "no"),
(2, "2019-10-10 22:11:11", "2019-10-10 23:11:11", "yes"),
(3, "2019-10-10 11:00:59", "2019-10-10 13:43:01", "yes"),
(4, "2019-10-10 23:57:59", "2019-10-11 00:00:01", "no");
, поэтому теперь, когда я запускаю
select
*,
subtime(time(end_time), time(start_time)) as duration
from mre;
Он выводит
id start_time end_time desired duration
1 2019-10-10 23:59:59 2019-10-11 00:01:01 no -23:58:58
2 2019-10-10 22:11:11 2019-10-10 23:11:11 yes 01:00:00
3 2019-10-10 11:00:59 2019-10-10 13:43:01 yes 02:42:02
4 2019-10-10 23:57:59 2019-10-11 00:00:01 no -23:57:58
Первая строка начинается с 2019-10-10, но заканчивается на 2019-10-11. Если вы посмотрите на время, разница между ними должна быть 00:01:02, что я и хочу.
, но вместо этого она дает мне 00:01:01 - 23:59:59 = -23:58:58.
переключение мест в end_time и start_time не имеет смысла (я попробовал на всякий случай).
Кто-нибудь может помочь?
Заранее спасибо!
РЕДАКТИРОВАТЬ: Я только что понял, что это потому, что внутри функции subtime я обертываю end_time и start_time с помощью TIME (), поэтому он игнорирует даты.
Поэтому я попытался сделать это без TIME (), которые дают нулевые значения для столбца продолжительности.