IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Comparer deux plages de date


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut Comparer deux plages de date
    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

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    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);

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    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 ?

  4. #4
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Date BETWEEN sysdate+4 AND sysdate+12
    A tester mais ça me semble répondre à la problématique de kyra2778.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    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

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Pas totalement J1.
    En fait il faudrait que je fasse

    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
    Ce serait quelque chose dans ce style là.
    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).

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Si il a raison, les conditions
    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
    sont équivalentes à
    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
    et c'est bien équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date BETWEEN sysdate+4 AND sysdate+12
    La version avec les trunc c'est au cas où vous avez des minutes sur votre colonne date.

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Cela fonctionne parfaitement

    Merci à vous deux. Je pensais que ce serait beaucoup plus complexe BETWEEN .

    Je passe le sujet en résolu.
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Comparer deux plages de valeurs
    Par function_Help dans le forum Excel
    Réponses: 1
    Dernier message: 24/08/2014, 10h19
  2. Comparer deux plages de cellules
    Par jesmen dans le forum Excel
    Réponses: 4
    Dernier message: 20/10/2012, 18h39
  3. [Batch] Comparer deux formats de date
    Par manu7762323 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 18/03/2010, 14h15
  4. Comparer deux plages de cellules
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 15/05/2008, 14h55
  5. [date] Comparer deux formats différents
    Par terziann dans le forum Requêtes
    Réponses: 17
    Dernier message: 21/07/2003, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo