Вычитание времени MySQL, несовместимого на разных машинах

StackOverflow https://stackoverflow.com/questions/361455

  •  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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top