2012-10-06 6 views
0

J'essaie de mettre en œuvre une logique qui renvoie le «meilleur» de trois fois. Mes champs DB sont:MySQL Time vs comparaison d'époque

FIRST_TIME - this is a long value in milliseconds from the epoch 
SECOND_TIME - also a long value in milliseconds from the epoch 
THIRD_TIME - this is an Time field, representing US/Eastern time, like 08:30:52 

Ma logique devrait être:

  1. Si FIRST_TIME est rempli, le retour que HH: mm: ss converti en US/heure de l'Est
  2. autre si SECOND_TIME (converti US/est) est postérieure à THIRD_TIME, retour SECOND_TIME aux Etats-Unis/heure de l'est
  3. retour THIRD_TIME autre

Je peux utiliser FROM_UNIXTIME pour obtenir les deux premiers champs dans HH: mm: ss, mais je suis confus sur la façon de le convertir dans le bon fuseau horaire, et en outre comment comparer mes champs et retourner la meilleure valeur.

+1

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz et http://dev.mysql.com/doc/refman/5.5/fr/date-and-time-functions.html#function_time –

Répondre

0

Bien, merci Marc! Maintenant, je peux convertir mes temps d'époque en valeurs de temps en utilisant:

TIME(CONVERT_TZ(FROM_UNIXTIME(SUBSTRING(FIRST_TIME,1,10)),'GMT','US/Eastern')) 

Maintenant, tout ce qui reste est de savoir comment utiliser MySQL pour trier la logique pour moi. J'ai pu le faire avec ceci:

(IF (FIRST_TIME IS NOT NULL, 
    TIME(CONVERT_TZ(FROM_UNIXTIME(SUBSTRING(FIRST_TIME,1,10)),'GMT','US/Eastern')), 
IF(TIME(CONVERT_TZ(FROM_UNIXTIME(SUBSTRING(SECONT_TIME,1,10)),'GMT','US/Eastern')) > THIRD_TIME, 
    TIME(CONVERT_TZ(FROM_UNIXTIME(SUBSTRING(SECOND_TIME,1,10)),'GMT','US/Eastern')), 
THIRD_TIME)) 
) AS BEST_TIME,