Расчет метки времени на запросах SQL - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь отобразить общее время поездки каждого клиента в формате времени данных (00:00:00)

Но я не совсем понимаю, стоит ли мне просто

SEC_TO_TIME (SUM (конечное время - время начала))

или

SEC_TO_TIME (SUM ( TIME_TO_SEC (время окончания - время начала)))

или

SEC_TO_TIME (СУММА ( TIME_TO_SEC (время окончания) - TIME_TO_SEC (время начала))

, если время окончания и время начала в формате даты и времени

Какой из них должен быть правильным способом. Я получаю разные результаты для первого и второго

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Из трех вариантов я бы порекомендовал:

SEC_TO_TIME(SUM(TIME_TO_SEC(endtime) 

- TIME_TO_SEC (время начала))

Во-первых, я думаю, что это самое ясное из того, что вы хотите сделать:

  • Преобразование даты / времени в секунды
  • Сложение секунд
  • Преобразование назад во время

Во-вторых, MySQL обрабатывает дату / времязначения в виде чисел в числовом контексте.Это может привести к странным результатам, потому что 2018-09-13 превращается в 20 180 913, и это обычно не то, что вы хотите.

0 голосов
/ 13 сентября 2018

1-й:

преобразовать endtime и starttime в метку времени, используя UNIX_TIMESTAMP

второй:

вычесть их

примечание: результат будет в секундах

(UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime))

чтобы определить, сколько времени потребил клиент

3-й:

преобразовать результат во время

SEC_TO_TIME( (UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime)) )

поэтому ваш последний запрос должен быть таким

SELECT SEC_TO_TIME( (UNIX_TIMESTAMP(endtime) - UNIX_TIMESTAMP(starttime)) ) FROM travel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...