Я пытаюсь показать общее время поездки, которое каждый клиент в формате времени данных (00:00:00)
Но я смущен, должен ли я просто делать
SEC_TO_TIME (SUM (время окончания - время начала))
или же
SEC_TO_TIME (SUM (TIME_TO_SEC (время окончания - время начала)))
или же
SEC_TO_TIME (SUM (TIME_TO_SEC (конечное время) - TIME_TO_SEC (время запуска))
если время окончания и время начала в формате даты и времени
который должен быть правильным способом сделать это. Я получаю другой результат для первого и второго
первая:
конвертировать время endtime
и время starttime
в метку времени с помощью UNIX_TIMESTAMP
второй:
вычесть их
примечание: результат будет в секундах
(UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime))
определить, сколько времени потратил заказчик
третий:
конвертировать результат во времени
SEC_TO_TIME( (UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime)) )
поэтому ваш окончательный запрос должен быть таким
SELECT SEC_TO_TIME( (UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime)) ) FROM travel
Из ваших трех вариантов я бы рекомендовал:
SEC_TO_TIME(SUM(TIME_TO_SEC(endtime)
- TIME_TO_SEC (время запуска))
Во-первых, я думаю, что это ясно, что вы хотите сделать:
Во-вторых, MySQL обрабатывает значения даты/времени как числа в числовом контексте. Это может вызвать странные результаты, потому что 2018-09-13 превращается в 20 180 913, и это обычно не то, что вы хотите.
100:10:05
? Будет ли более разумным просто сообщать в течение нескольких часов с возможным дробным компонентом?