Bonjour,
j'ai dans une table 1 colonne de type date nommée jour et une colonne nommée heure de type time.
Je souhaite via ces 2 colonnes récupérer tous les enregistrements (pour faire simple) qui sont compris dans un intervalle de type datetime comme par exemple ['2011-03-01 15:28:36' - '2011-03-05 11:23:10']
J'ai commencé par faire ceci :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... WHERE CAST(CONCAT(jour, ' ', heure) AS DATETIME) BETWEEN 'un datetime...' AND 'un autre datetime...' ...
Cela marchait mais c'était extremement long et pas difficile à comprendre que c'était le cast qui faisait ramer. Cependant, pour reprendre l'intervalle évoqué plus haut, je ne peux faire ceci :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ... WHERE (jour BETWEEN '2011-03-01' AND '2011-03-05') AND (heure BETWEEN '15:28:36' AND '11:23:10') ...
pour des raisons évidentes...Ainsi, mon alternative actuelle est de "mixer" un peu les 2 méthodes à savoir jointer 2 tables en filtrant d'emblée les jours puis sur le regroupement des 2 tables, filtrer les jours et les heures via une conversion de type ou en utilisant la fonction TIMESTAMP.
Ainsi, au début, j'avais une structure telle que celle ci :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT .... FROM ... INNER JOIN... ON ... WHERE CAST(CONCAT(jour, ' ', heure) AS DATETIME) BETWEEN ... AND ...
Et maintenant :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT ... FROM ( SELECT... FROM .... WHERE jour BETWEEN ... AND ... ) INNER JOIN ... ON ... WHERE TIMESTAMP(CONCAT(h.jour, ' ', h.heure)) BETWEEN ... AND ...
ce qui me permet de passer d'un temps de traitement de 2,5s à 1,5s car la conversion s'effectue sur les jours déjà filtrés par le regroupement de jointure et pas sur toutes les lignes de la tables.
Mais comment améliorer encore ce type de requête à savoir récupérer un intervalle de type datetime avec 2 champs de type date et time ?
Merci de vos idées
Partager