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 :

Sélectionner un intervalle de champs de type DATE


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut Sélectionner un intervalle de champs de type DATE
    Bonjour,

    Sous Oracle, je cherche à récupérer des dates comprises entre la date du jour et il y a un mois. Voici un aperçu de la table sur laquelle je travaille, rien d'extraordinaire :

    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
     
    select sdate from matable;
    SDATE
    --------
    26/07/07
    16/08/07
    17/08/07
    17/08/07
    10/08/07
    20/08/07
    20/08/07
    28/08/07
    30/08/07
    12/06/07
    14/08/07
    Ensuite, voilà la requête qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select sdate
    from matable
    where trunc(sdate, 'DD') < trunc(SYSDATE, 'DD') AND trunc(sdate, 'DD') >= trunc(add_months(SYSDATE, -1),'DD');
     
     
    aucune ligne sélectionnée

    En cherchant je suis tombé sur ce topic, et je me suis inspiré de la fonction TRUNC... Mais même sans utiliser TRUNC, ça ne marche pas.

    Qu'est-ce qui cloche avec ma requête ??

  2. #2
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    J'ai recopié ton exemple, il marche avec moi :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    WITH matable AS (
    SELECT to_date('260707','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('160807','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('170807','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('170807','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('100807','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('200807','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('200807','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('280807','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('300807','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('120607','ddmmyy') AS sdate FROM dual
    UNION ALL
    SELECT to_date('140807','ddmmyy') AS sdate FROM dual)
    SELECT sdate
    FROM matable
    WHERE trunc(sdate, 'DD') < trunc(SYSDATE, 'dd') 
    AND trunc(sdate, 'dd') >= trunc(add_months(SYSDATE, -1),'DD')
     
    16/08/2007
    17/08/2007
    17/08/2007
    10/08/2007
    20/08/2007
    20/08/2007
    28/08/2007
    14/08/2007
    Peut-être une faute de frappe ?

  3. #3
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Il faut utiliser
    TRUNC(ladate) pour s'affranchir de l'heure
    Et cela suffit !
    Ne pas utiliser de format dans ce cas !
    Attention à l'ordre des dates dans le between !

    Le plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select madate FROM matable
    where 
    MONTHS_BETWEEN(trunc(madate),trunc(sysdate)) between -1 and 0

  4. #4
    Membre chevronné Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Par défaut
    As-tu essayé cette syntaxe :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    ....where (tadate <= CURRENT_DATE) and (tadate >= (CURRENT_DATE - INTERVAL 31 DAY))...
    ou bien :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    ....where (tadate <= CURRENT_DATE) and (tadate >= (CURRENT_DATE - INTERVAL 1 MONTH))...

  5. #5
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut
    Bonjour,

    Bon vous me faites un peu peur là... Ca marche donc chez vous, sauf chez moi ?? En ce qui me concerne, je tourne sous Oracle9i EE 9.2.0.1.0

    Alors...

    Loyd1974 : ta méthode me renvoie la même chose que toi, même si j'ai pas tout compris lol

    Garuda : j'ai essayé ta requête, assez compacte (j'aime), mais elle ne me renvoit aucune ligne.

    AL1986 : J'ai une erreur "ORA-00907: Parenthèse de droite absente"


    Je pense pas avoir fait d'erreur de syntaxe, sinon Oracle m'aurait alerté non ?

    Merci de votre aide

  6. #6
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Garuda : j'ai essayé ta requête, assez compacte (j'aime), mais elle ne me renvoie aucune ligne.
    essaye pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT madate,MONTHS_BETWEEN(trunc(madate),trunc(sysdate))
     FROM matable

  7. #7
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Et pour verifier l'année (je flaire le pb de format)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select to_char(madate,'DD/MM/YYYY') from matable

  8. #8
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut
    Citation Envoyé par Garuda Voir le message
    essaye pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT madate,MONTHS_BETWEEN(trunc(madate),trunc(sysdate))
     FROM matable
    Ca donne ça
    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
    SDATE    MONTHS_BETWEEN(TRUNC(SDATE),TRUNC(SYSDATE))
    -------- -------------------------------------------
    26/07/07                                  -24001,097
    16/08/07                                  -24000,419
    17/08/07                                  -24000,387
    17/08/07                                  -24000,387
    10/08/07                                  -24000,613
    20/08/07                                   -24000,29
    20/08/07                                   -24000,29
    28/08/07                                  -24000,032
    30/08/07                                  -23999,968
    12/06/07                                  -24002,548
    14/08/07                                  -24000,484
     
    11 ligne(s) sélectionnée(s).


    Citation Envoyé par Garuda Voir le message
    Et pour verifier l'année (je flaire le pb de format)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select to_char(madate,'DD/MM/YYYY') from matable
    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
    TO_CHAR(SD
    ----------
    26/07/0007
    16/08/0007
    17/08/0007
    17/08/0007
    10/08/0007
    20/08/0007
    20/08/0007
    28/08/0007
    30/08/0007
    12/06/0007
    14/08/0007
     
    11 ligne(s) sélectionnée(s).

    Je crois que tu as du flair, pourquoi c'est daté de l'an 7 ?!

  9. #9
    Membre chevronné Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Par défaut
    Citation Envoyé par tyrant Voir le message
    AL1986 : J'ai une erreur "ORA-00907: Parenthèse de droite absente"
    Désolé, j'ai commis une petite erreur, j'ai oublié les '' autour de 31
    Là ça devrait marcher (même sans parenthèses)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT madate 
    FROM matable
    WHERE madate <= CURRENT_DATE
    AND madate >= CURRENT_DATE - INTERVAL '31' DAY

Discussions similaires

  1. [Sql] Comment inserer un champs de type Date ?
    Par ridondo dans le forum DB2
    Réponses: 4
    Dernier message: 28/11/2005, 14h40
  2. Ajouter un champs de type " Date " dans ma base ac
    Par hysteresis dans le forum Langage SQL
    Réponses: 16
    Dernier message: 10/10/2005, 16h10
  3. insérer un 'NULL' dans un champ de type DATE
    Par Invité dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/06/2005, 09h23
  4. Pb avec une dbgrid et un champ de type date
    Par Ellde dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/03/2005, 16h21
  5. Critères sur champ de type date
    Par blasco dans le forum Access
    Réponses: 2
    Dernier message: 29/10/2004, 09h48

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