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

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 12
    Points
    12
    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 habitué 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
    Points : 196
    Points
    196
    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 chevronné 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
    Points : 2 071
    Points
    2 071
    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 averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    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 à l'essai
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 12
    Points
    12
    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 chevronné 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
    Points : 2 071
    Points
    2 071
    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 chevronné 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
    Points : 2 071
    Points
    2 071
    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 à l'essai
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 12
    Points
    12
    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 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
    Points : 2 071
    Points
    2 071
    Par défaut
    Je crois que tu as du flair, pourquoi c'est daté de l'an 7 ?!
    Ca, il faut demander a ceux qui ont developpé l'appli !

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Tu pense que c'est la fonction "to_char" qui est fautive ou bien que l'erreur est directement au niveau de la colonne "sdate" de type DATE ?

  11. #11
    Membre chevronné 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
    Points : 2 071
    Points
    2 071
    Par défaut
    la date est fausse DANS LA BASE !
    Il faut
    - corriger les données pour les mettre à la bonne année (2007)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update matable set sdate=ADD_MONTHS(sdate,2000*12);
    - corriger le prog qui alimente la colonne pour qu'il donne la bonne année (2007)

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Effectivement,

    c'est ce qu'on appelle une erreur entre le clavier et la chaise


    Désolé du dérangement, et merci pour vos tuyaux


    A+

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    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, 15h40
  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, 17h10
  3. insérer un 'NULL' dans un champ de type DATE
    Par 84mickael dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/06/2005, 10h23
  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, 17h21
  5. Critères sur champ de type date
    Par blasco dans le forum Access
    Réponses: 2
    Dernier message: 29/10/2004, 10h48

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