Вычитание времени MySQL, несовместимого на разных машинах
-
21-08-2019 - |
Вопрос
У меня есть запрос MySQL, структурированный следующим образом:
SELECT time(c.start_time),
time(c.end_time),
time(c.end_time) - time(c.start_time) as 'opening_hours'
FROM my_shop c;
Данные по времени начала и окончания: 1970-01-01 07:00:00 и 1970-01-01 19:00:00 соответственно.
На моей локальной машине этот запрос возвращает:
| 07:00:00 | 19:00:00 | 12 |
Однако на удаленной машине (производстве) он возвращается
| 07:00:00 | 19:00:00 | 120000 |
Есть идеи, почему это может происходить и как это исправить?
Оба набора данных идентичны, и, насколько мне известно, обе установки MySQL идентичны.
Буду признателен за любую оказанную помощь.
Обновлять:
Казалось бы, версии MySQL немного отличаются:5.0.27-community-nt против 5.0.51b-community-nt.Это, скорее всего, причина.
djt поднял хороший вопрос: решение Билла не учитывает минуты.К тому же решение этого djt не совсем то, что мне нужно.
Итак, я думаю, вопрос превратился в то, как вычесть два раза, включая минуты, так что:
1970-01-01 19:00:00 - 1970-01-01 07:00:00 = 12
1970-01-01 19:00:00 - 1970-01-01 07:30:00 = 11.5
1970-01-01 19:00:00 - 1970-01-01 07:45:00 = 11.25
и т. д.
Решение
Я бы сделал это так:
SELECT TIME(c.start_time),
TIME(c.end_time),
EXTRACT(HOUR FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time)))
AS 'opening_hours'
FROM my_shop c;
Другие советы
Обычно одни и те же методы, вызывающие разные выходные данные, создают впечатление, что это другая конфигурация или версия сервера.На самом деле я не могу с этим помочь, но, возможно, вместо этого стоит попробовать в вашем запросе метод, указанный ниже:
SELECT TIME(c.start_time), TIME(c.end_time), TIMEDIFF(TIME(c.end_time), TIME(c.start_time)) as 'opening_hours' FROM my_shop c;
Это даст вам отформатированную временную метку часов, минут и секунд открытия.
Есть ли лучшее решение, чем это:
SELECT EXTRACT(HOUR FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time)))
+ ((EXTRACT(MINUTE FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time))))/60)
FROM my_shop c;