Pregunta

Tengo una consulta MySQL estructurado de la siguiente manera:

SELECT time(c.start_time),
       time(c.end_time),
       time(c.end_time) - time(c.start_time) as 'opening_hours' 
FROM my_shop c;

Los datos de la hora de inicio y final es 1970-01-01 07:00:00 y 19:00:00 1970-01-01 respectivamente.

En mi máquina local, este esta consulta devuelve:

| 07:00:00 | 19:00:00 | 12 |

Sin embargo en una máquina remota (de producción) se está volviendo

| 07:00:00 | 19:00:00 | 120000 |

Alguna idea de por qué esto podría estar sucediendo y cómo solucionarlo?

Los dos conjuntos de datos son idénticos y también lo mejor de mi conocimiento tanto de las instalaciones de MySQL son idénticos.

Cualquier ayuda es muy apreciada.

Actualización:

Parece que las versiones de MySQL son ligeramente diferentes: 5.0.27-comunidad-nt frente 5.0.51b-comunidad-nt. Esto es muy probablemente la razón por qué.

djt ha planteado un buen punto en la solución de ese proyecto de ley no tiene en cuenta los minutos. Así como la solución de este djt no es exactamente lo que necesito.

Así que supongo que la pregunta se ha transformado en la forma de restar dos veces incluyendo 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.

¿Fue útil?

Solución

Me gustaría hacerlo de esta manera:

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;

Otros consejos

Por lo general, los mismos métodos que causan salida diferente da la impresión de que es o bien una configuración de servidor diferente o versión. No estoy realmente capaz de ayudar con eso, sino que puede valer la pena intentar el método de abajo en su consulta en lugar

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;

Esto le dará una indicación de la hora con formato de las horas de apertura, minutos y segundos.

¿Hay una solución mejor que esto:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top