Вычитание времен MySQL, несовместимых на разных машинах - PullRequest
2 голосов
/ 12 декабря 2008

Мой запрос 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

и т.д.

Ответы [ 3 ]

1 голос
/ 12 декабря 2008

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

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 декабря 2008

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

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;
0 голосов
/ 12 декабря 2008

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

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;
...