Bonjour à tous,
J'ai un petit soucis.
Alors voilà dans ma table j'ai un champ Date. J'aimerais avoir tous les enregistrements de ma table dont Date -8 à Date-4 soit compris dans sysdate à sysdate +4.
Avez vous une solution ?
Merci d'avance
Bonjour à tous,
J'ai un petit soucis.
Alors voilà dans ma table j'ai un champ Date. J'aimerais avoir tous les enregistrements de ma table dont Date -8 à Date-4 soit compris dans sysdate à sysdate +4.
Avez vous une solution ?
Merci d'avance
Quel est la version d'Oracle ?
Vous pouvez utiliser OVERLAPS, mais la fonction n'étant toujours pas documentée donc je vous déconseille d'envoyer celà en production :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT * FROM MaTable WHERE (MaDate-8, MaDate-4) OVERLAPS (sysdate, sysdate+4);
Je suis sous Oracle 10g.
En tout cas ta solution marche nickel.
Si je mets ça en prod il n'y aura pas de soucis avec ma version d'oracle ?
En l'absence d'OVERLAPS, mon intuition me guiderait vers la solution suivante, où je déporte à droite du BETWEEN les 2 intervalles à prendre en compte :
A tester mais ça me semble répondre à la problématique de kyra2778.
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE Date BETWEEN sysdate+4 AND sysdate+12
Celà dit après réflexion il y a plus simple, les plages faisant la même longueur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM MaTable WHERE MaDate >= trunc(sysdate)+5 AND MaDate < trunc(sysdate)+12
Pas totalement J1.
En fait il faudrait que je fasse
Ce serait quelque chose dans ce style là.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 WHERE Date-8 BETWEEN sysdate AND sysdate+4 AND Date-7 BETWEEN sysdate AND sysdate+4 AND Date-6 BETWEEN sysdate AND sysdate+4 AND Date-5 BETWEEN sysdate AND sysdate+4 AND Date-4 BETWEEN sysdate AND sysdate+4
Le soucis c'est que ma plage de date peut varier de 4 jours à n jours et je ne peux pas passer par une procédure stockée (ce serait trop facile :p).
Si il a raison, les conditions
sont équivalentes à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Date-8 BETWEEN sysdate AND sysdate+4 OR Date-7 BETWEEN sysdate AND sysdate+4 OR Date-6 BETWEEN sysdate AND sysdate+4 OR Date-5 BETWEEN sysdate AND sysdate+4 OR Date-4 BETWEEN sysdate AND sysdate+4
et c'est bien équivalent à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Date BETWEEN sysdate+8 AND sysdate+12 OR Date BETWEEN sysdate+7 AND sysdate+11 OR Date BETWEEN sysdate+6 AND sysdate+10 OR Date BETWEEN sysdate+5 AND sysdate+9 OR Date BETWEEN sysdate+4 AND sysdate+8
La version avec les trunc c'est au cas où vous avez des minutes sur votre colonne date.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Date BETWEEN sysdate+4 AND sysdate+12
Cela fonctionne parfaitement
Merci à vous deux. Je pensais que ce serait beaucoup plus complexe BETWEEN.
Je passe le sujet en résolu.
Merci encore
Partager