Question

Est-il possible de joindre deux tables basées sur la même date sans tenir compte du temps?

Quelque chose comme:

  

... DE Rendez-vous LEFT JOIN sales ON   appointments.date = sales.date ...

Le seul problème est qu’il s’agit d’un champ de date / heure, donc je veux être sûr qu’il ne regarde que la date et ignore le temps

Était-ce utile?

La solution

Vous pouvez le faire comme ceci:

FROM appointments
LEFT JOIN sales ON DATE(appointments.date) = DATE(sales.date)

Mais je suis presque sûr qu'il ne pourra pas utiliser d'index, ce sera donc très lent.

Il vaudrait peut-être mieux ajouter une colonne de date à chaque tableau.

Autres conseils

La clause ON accepte une expression conditionnelle arbitraire. Vous pouvez donc effectuer la normalisation de la date des deux côtés avant de comparer, mais cela devrait représenter une pénalité de performance significative.

Oui, mais vous devez joindre une expression calculée, qui supprime l'heure des valeurs de la colonne datetime. Cela rendra la requête non-SARGable (elle ne peut pas utiliser d'index) et générera donc un scan de table ...

Je ne connais pas la syntaxe dans mysql pour supprimer le temps d'une valeur datetime, mais quoi que ce soit, écrivez simplement

   FROM appointments a 
      LEFT JOIN sales s 
         ON StripTime(s.date) = StripTime(a.date)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top