Mysql: вычислите продолжительность времени между двумя часами утра и вечера

#mysql #time

Вопрос:

Мне нужно рассчитать разницу между двумя столбцами, которые имеют тип time . Поля имеют имена start_time и end_time . Я использую эту функцию timediff(s,e) , и она работает хорошо, но иногда это не так. Например, когда end_time есть 00:00 то, что считается 12 AM и start_time есть 19:00 то, что является 7 PM функцией разницы, показывает 19 часов (на самом деле я также выбираю hour(timediff(s,e)) ), в то время как я ожидаю, что это будет 5 часов.

Как я могу это исправить?


Я попробовал это

 case   when finish_time lt; start_time then TIMEDIFF(timestamp('2021:01:02',finish_time),timestamp('2021:01:01',start_time))  else TIMEDIFF(timestamp('2021:01:01',finish_time),timestamp('2021:01:01',start_time)) end as diff,  

и это работает

Ответ №1:

Поскольку 00:00:00 считается началом нового дня или даже если у вас есть время окончания, которое наступает на следующий день после времени начала, вам придется преобразовать поля начала и окончания в типы ДАТЫ и времени. Также, если вы хотите разницу между 2 разами, которые вы должны использовать timediff(end,start)

Комментарии:

1. Я обновил вопрос. Это хорошее решение?

2.Даты такие '2021-01-02' yyyy-mm-dd

3. Если вы протестировали его и он работает, то все в порядке

4. Спасибо. Да, все в порядке. Я просто искал лучшую практику