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
    Membre averti
    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
    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
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    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
    Membre averti
    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
    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 expérimenté Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    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
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    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
    Membre averti
    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
    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
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    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
    Membre averti
    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
    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