Question

J'ai une requête MySQL structuré comme suit:

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

Les données en temps de début et de fin est 01.01.1970 07:00:00 et 19:00:00, respectivement 01/01/1970.

Sur ma machine locale cette cette requête retourne:

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

Toutefois, sur une machine distante (production), il retourne

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

Toutes les idées pour lesquelles cela pourrait se produire et comment y remédier?

Les deux ensembles de données sont identiques et aussi le meilleur de ma connaissance les deux installations de MySQL sont identiques.

Toute aide est très appréciée.

Mise à jour:

Il semblerait que les versions de MySQL sont légèrement différentes: 5.0.27-community-nt par rapport 5.0.51b-communauté-nt. Ceci est très probablement la raison pour laquelle.

DJT a soulevé un bon point dans la solution de ce projet de loi ne prend pas en compte de minutes. Ainsi que la solution de cette DJT est pas tout à fait ce que je dois.

Alors je suppose que la question a transformé la façon de soustraire deux fois, y compris minutes de telle sorte 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.

Était-ce utile?

La solution

Je le ferais de cette façon:

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;

Autres conseils

En général, les mêmes méthodes provoquant une sortie différente donne l'impression qu'il est une configuration de serveur ou une version différente. Je ne suis pas vraiment en mesure d'aider à cela, mais il peut être utile d'essayer la méthode ci-dessous dans votre requête à la place:

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;

Cela vous donnera un horodatage au format des heures d'ouverture, minutes et secondes.

Y at-il une meilleure solution que celle-ci:

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top