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);
Email : http://scr.im/waldar
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
Email : http://scr.im/waldar
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
Email : http://scr.im/waldar
Cela fonctionne parfaitement
Merci à vous deux. Je pensais que ce serait beaucoup plus complexe BETWEEN .
Je passe le sujet en résolu.
Merci encore
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager