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

У меня 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

и т.п.

11.12.2008 23:47:32
3 ОТВЕТА
РЕШЕНИЕ

Я бы сделал это так:

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;
1
12.12.2008 00:49:43
Это будет работать на желаемой машине. В идеале я не хочу менять код, но полагаю, что если это единственное решение, пусть будет так. Я все еще очень хотел бы знать, почему это происходит, хотя это довольно озадачивает.
abarax 12.12.2008 00:55:13
Я не уверена. Я бы предложил проверить версии MySQL на каждой машине. "ВЫБЕРИТЕ ВЕРСИЮ ();"
Bill Karwin 12.12.2008 01:21:34
Извините, Билл, я не видел вашего ответа, прежде чем отправил. Наши решения похожи, но я не верю, что у вас будут неполные часы (например, если конечная дата была 19:30).
djt 12.12.2008 01:33:03
Вы правы, он покажет целые часы только как целое число. Но это то, о чем просил ОП.
Bill Karwin 13.12.2008 00:10:07

Обычно одни и те же методы, вызывающие различный вывод, создают впечатление, что это либо другая конфигурация сервера, либо версия. Я не могу помочь с этим, но, возможно, стоит попробовать метод ниже в вашем запросе:

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;

Это даст вам отформатированную метку времени открытия часов, минут и секунд.

1
12.12.2008 00:53:36
Интересно, что это приводит к «12:00:00», что, я думаю, и есть то, что мой запрос возвращает на этой конкретной машине без двоеточий. Возможно, в настройках MySQL есть настройка форматирования даты, которая отличается. Любые идеи?
abarax 12.12.2008 00:58:29

Есть ли лучшее решение, чем это:

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;
0
12.12.2008 05:02:41
Знаете ли вы, что вы можете сделать EXTRACT (HOUR_MINUTE FROM ...)?
Bill Karwin 13.12.2008 00:10:44