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.

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top