Subtração de vezes que o MySQL inconsistentes em diferentes máquinas
-
21-08-2019 - |
Pergunta
Eu tenho uma consulta MySQL estruturado da seguinte forma:
SELECT time(c.start_time),
time(c.end_time),
time(c.end_time) - time(c.start_time) as 'opening_hours'
FROM my_shop c;
Os dados da hora de início e de fim é 1970-01-01 1970-01-01 07:00:00 e 19:00:00, respectivamente.
Na minha máquina local This consulta retorna:
| 07:00:00 | 19:00:00 | 12 |
No entanto em uma máquina remota (de produção) ele está retornando
| 07:00:00 | 19:00:00 | 120000 |
Todas as ideias por que isso pode estar acontecendo e como corrigi-lo?
Ambos os conjuntos de dados são idênticos e também o melhor de meu conhecimento ambas as instalações do MySQL são idênticas.
Qualquer ajuda é muito apreciada.
Update:
Parece que as versões do MySQL são ligeiramente diferentes: 5.0.27-community-nt contra 5.0.51b-community-nt. Esta é provavelmente a razão pela qual.
DJT levantou um bom ponto em que a solução da Bill não leva em conta minutos. , Bem como solução deste DJT não é exatamente o que eu preciso.
Então, eu acho que a pergunta se transformou em como subtrair duas vezes incluindo minutos de tal forma que:
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
etc.
Solução
Eu faria isso desta maneira:
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;
Outras dicas
Normalmente os mesmos métodos que causam saída diferente dá a impressão de que é uma configuração de servidor diferente ou versão. Eu não sou realmente capaz de ajudar com isso, mas pode valer a pena tentar o abaixo método em sua consulta em vez disso:
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;
Isto lhe dará um timestamp formatado da abertura horas, minutos e segundos.
Existe uma solução melhor do que este:
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;