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

Oracle Discussion :

[8.i]Fonctions dates et clause Where


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Par défaut [8.i]Fonctions dates et clause Where
    Bonjour,

    Merci d'avance aux membres de la communauté qui liront mon message et encore plus à ceux qui me répondront.

    Voici ma question :

    J'ai besoin de faire resortir une liste de données en fonction d'une certaine écheance.
    Pour illustrer , voici une requête exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM LATABLE
    WHERE ((SELECT SYSDATE FROM DUAL) - LATABLE.CHAMPSDATE_AAAA-MM-JJ) >= (18 mois)
    Ma soucis vient dans la condition présente dans la clause WHERE. Je sais qu'on peut calculer le nombre de jour entre deux dates, mais existe-t-il une solution pour que cela soit en nombres de mois ?

    Merci d'avance pour vos réponse.

    Cordialement
    Jérémy Dotti

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par jdotti
    Je sais qu'on peut calculer le nombre de jour entre deux dates, mais existe-t-il une solution pour que cela soit en nombres de mois ?
    Que donnerait la différence entre sysdate et le 15/06/06 :
    - 1 mois ?
    - un nombre à virgule représentant le nombre de jours d'écarts par rapport au nombre de jours du mois de juin ?
    - autre ?

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Par défaut
    Données anciennes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM LATABLE
    WHERE add_months(LATABLE.CHAMPSDATE_AAAA-MM-JJ, 18) < sysdate

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Par défaut
    Citation Envoyé par Vincent_D
    Données anciennes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM LATABLE
    WHERE add_months(LATABLE.CHAMPSDATE_AAAA-MM-JJ, 18) < sysdate

    Bonjour,

    Merci pour vos réponses, finalement, en cherchant de mon côté je suis tombé aussi sur la fonction add_months() et ma requête est devenu cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SELECT LOC.DNDL, LOC.DDDL, LOC.DRENVL
    FROM KDEMLOC LOC
    WHERE (
            LOC.DNDL IN (
                          SELECT LOC2.DNDL 
                          FROM KDEMLOC LOC2
                          WHERE (
                                  (LOC2.DRENVL IS NULL) 
                                  AND 
                                  (ADD_MONTHS(LOC2.DDDL,18) < SYSDATE)      
                                )
                        )
          )
       OR
          (
            LOC.DNDL IN (
                          SELECT LOC3.DNDL 
                          FROM KDEMLOC LOC3 
                          WHERE (
                                  (LOC3.DRENVL IS NOT NULL) 
                                  AND 
                                  (ADD_MONTHS(LOC3.DRENVL,18) < SYSDATE))
            )
        AND 
          (DSTAT NOT IN ('E','C','H','2','3','F','X'))
        )
    Merci encore pour vos réponses !

  5. #5
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Par défaut
    Citation Envoyé par jdotti

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SELECT LOC.DNDL, LOC.DDDL, LOC.DRENVL
    FROM KDEMLOC LOC
    WHERE (
            LOC.DNDL IN (
                          SELECT LOC2.DNDL 
                          FROM KDEMLOC LOC2
                          WHERE (
                                  (LOC2.DRENVL IS NULL) 
                                  AND 
                                  (ADD_MONTHS(LOC2.DDDL,18) < SYSDATE)      
                                )
                        )
          )
       OR
          (
            LOC.DNDL IN (
                          SELECT LOC3.DNDL 
                          FROM KDEMLOC LOC3 
                          WHERE (
                                  (LOC3.DRENVL IS NOT NULL) 
                                  AND 
                                  (ADD_MONTHS(LOC3.DRENVL,18) < SYSDATE))
            )
        AND 
          (DSTAT NOT IN ('E','C','H','2','3','F','X'))
        )
    Je comprends pas ta requete pourquoi tu as 2 sous requetes ?

    Pour moi tu pourrais écrire la meme chose plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT LOC.DNDL, LOC.DDDL, LOC.DRENVL
    FROM KDEMLOC LOC
    WHERE ADD_MONTHS(LOC3.DRENVL,18) < SYSDATE
       AND DSTAT NOT IN ('E','C','H','2','3','F','X')
    En plus de tout ca pense aussi aux indexes. Si tu veux que ta requete soit performante avec un peu de volume, il vaudrait mieux que ta colonne DRENVL soit indexée. Sauf qu'a cause du ADD_MONTHS (et de meme avec le MONTHS_BETWEEN) on ne peut pas utiliser l'indexe.

    Pour pouvoir l'utiliser il faut inverser l'ecriture de la condition pour que la colonne DRENVL soit visible directement et non pas utilisé dans une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT LOC.DNDL, LOC.DDDL, LOC.DRENVL
    FROM KDEMLOC LOC
    WHERE LOC3.DRENVL > ADD_MONTHS(SYSDATE,18) 
       AND DSTAT NOT IN ('E','C','H','2','3','F','X')

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Par défaut
    Citation Envoyé par Magnus
    Que donnerait la différence entre sysdate et le 15/06/06 :
    - 1 mois ?
    - un nombre à virgule représentant le nombre de jours d'écarts par rapport au nombre de jours du mois de juin ?
    - autre ?
    Réponse : - un nombre à virgule représentant le nombre de jours d'écarts par rapport au nombre de jours du mois de juin ?

  7. #7
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    euuuh juste un détail :
    la fonction months_between fait exactement ce qui demandé, non ?

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

Discussions similaires

  1. Fonction Scalaire et Clause WHERE
    Par Farçous dans le forum Développement
    Réponses: 4
    Dernier message: 03/05/2010, 14h59
  2. Lenteur à l'utilisation d'une fonction dans une clause WHERE
    Par lacombefr dans le forum Développement
    Réponses: 2
    Dernier message: 06/04/2010, 19h50
  3. Format date dans clause Where
    Par aurelie83 dans le forum DB2
    Réponses: 5
    Dernier message: 06/01/2009, 20h48
  4. Problème avec fonction "Now" dans clause Where
    Par moilou2 dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/07/2008, 18h44
  5. Fonction déterministe dans clause where
    Par McFoggy dans le forum SQL
    Réponses: 1
    Dernier message: 24/06/2007, 20h46

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