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 :

[Oracle] Between date


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut [Oracle] Between date
    Bonjour,

    J'aimerai faire un between entre des dates de format 'MM YYYY' et pour le moment j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE TO_CHAR(DOS_CLOTURE_DATE) between TO_CHAR('01/07/2005', 'MM YYYY') 
    AND TO_CHAR(ADD_MONTHS('01/10/2005', -1), 'MM YYYY')
    Mais j'ai l'erreur : ORA-01722: Nombre non valide sur ma premiere date de comparaison (01/07/2005)

    Si qq est deja tombé sur ce probleme, j'accepterai volontier son aide.

    Merci

  2. #2
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE TO_CHAR(DOS_CLOTURE_DATE) between TO_CHAR( TO_DATE('01/07/2005', 'DD/MM/RRRR'), 'MM YYYY') 
    AND TO_CHAR(ADD_MONTHS('01/10/2005', -1), 'MM YYYY')
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Ma requete marche maintenant avec ta solution mais mes resultats ne correspondent plus du tout

  4. #4
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    La, ma requete est censé faire le between des dates qu'avec le mois et l'année?

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Essaye plutôt de convertir tes données au format date, je pense que tu auras des résultats plus cohérents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE DOS_CLOTURE_DATE BETWEEN TO_DATE('01/07/2005', 'dd/mm/yyyy')
    AND TO_DATE(ADD_MONTHS('01/10/2005', -1), 'dd/mm/yyyy')
    PS : Si tu pouvais décocher la balise "Désactiver le BBCode" en bas de tes messages, la balise Code fonctionnerait mieux je pense
    Cette option est même accessible dans le profil, merci d'y penser
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    En fait, si je le met au format date comme cela, je ne fais pas une recherche uniquement sur le mois et l'année, le jour entre en compte et ca je ne veux pas.
    Et si je met juste TO_DATE('01/07/2005', 'MM YYYY'), le between n'aime pas

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SELECT TO_CHAR('01/07/2005', 'MM YYYY') FROM Dual;
    SELECT TO_CHAR('01/07/2005', 'MM YYYY') FROM Dual
                   *
    ERREUR à la ligne 1 :
    ORA-01722: Nombre non valide
    Normal, TO_CHAR convertit en CHAR, il attend un nombre en premier paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> SELECT TO_DATE('01/07/2005', 'MM YYYY') from dual;
    SELECT TO_DATE('01/07/2005', 'MM YYYY') from dual
                   *
    ERREUR à la ligne 1 :
    ORA-01830: données surnuméraires après la conversion correcte d'une chaîne en
    entrée
    Normal, la chaîne entrée ne correpond pas au format spécifié ...

    En bref, peux-tu nous décrire ce que tu veux faire exactement STP ?
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  8. #8
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Je veux qu'une date soit comprise entre 2 autres, mais uniquement au niveau des mois et des années.

    date between '06/2005' and '07/2005' par exmple

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE DOS_CLOTURE_DATE BETWEEN TO_DATE('01/07/2005', 'DD/MM/YYYY') 
    AND ADD_MONTHS(TO_DATE('01/07/2005', 1), 'DD/MM/YYYY')
    Un truc dans le genre ?

  10. #10
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    La il y a tjs les jours

  11. #11
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Je vois pas le pb dans le fait qu'il y ait toujours les jours ?
    Si ta date est reelement comprise entre le 1er juillet et le 1er aout, cette requete va te la ramener...
    Tu as essaye et ca ne marche pas ?

    Au passage, avec Oracle, si tu bosses avec des dates, tu ne peux pas juste avoir 07/2005 ca ne fonctionne pas. Tu peux faire un TRUNC(SYSDATE, 'MM') ca va te ramener le 1er du mois en cours et tu peux par exemple faire des correspondances avec tes colonnes.
    Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE TRUNC(MA_DATE, 'MM') = TO_DATE('01/07/2005', 'DD/MM/YYYY')
    va te ramener tous les champs ou MA_DATE est du mois de juillet sans tenir compte des jours...

  12. #12
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Ma date n'est pas comprise entre le 1er juillet et le 1er aout, mais entre 2 variable que je remplis.
    Mais je veux qu'il prenne les dates comprise la, par exemple, du mois de juillet et du mois d'aout et pas seulement de juillet a aout

  13. #13
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par malhivertman1
    Je veux qu'une date soit comprise entre 2 autres, mais uniquement au niveau des mois et des années.

    date between '06/2005' and '07/2005' par exmple
    Ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE TO_CHAR(DOS_CLOTURE_DATE, 'YYYYMM' BETWEEN '200506'
                                                 AND '200507'
    OU alors plus "rigoureux" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE DOS_CLOTURE_DATE BETWEEN TO_DATE('01/06/2005', 'dd/mm/yyyy')
                               AND TO_DATE('31/07/2005', 'dd/mm/yyyy')
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  14. #14
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    en fait, vous ne comprenez pas que les 2 dates dans laquelle ma date doit etre comprise ne sont pas des dates que je saisis a la main dans le code, elle sont parametrées en fonction de valeur saisie dans un formulaire

  15. #15
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Citation Envoyé par malhivertman1
    Ma date n'est pas comprise entre le 1er juillet et le 1er aout, mais entre 2 variable que je remplis.
    Mais je veux qu'il prenne les dates comprise la, par exemple, du mois de juillet et du mois d'aout et pas seulement de juillet a aout
    Donc si tu mets 10/07/2005 et 18/08/2005 tu veux les dates du 1er juillet au 31 aout c ca ?

    Donc ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE MA_DATE BETWEEN TRUNC(TO_DATE('10/07/2005', 'DD/MM/YYYY'), 'MM') AND ADD_MONTHS(TRUNC(TO_DATE('18/08/2005', 'DD/MM/YYYY'), 'MM'), 1)
    Edit: correction de copier coller

  16. #16
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Citation Envoyé par malhivertman1
    en fait, vous ne comprenez pas que les 2 dates dans laquelle ma date doit etre comprise ne sont pas des dates que je saisis a la main dans le code, elle sont parametrées en fonction de valeur saisie dans un formulaire
    Ca n'est pas le pb principal je pense.
    Ici on te met des dates en "dur" dans la requete pour te montrer une requete qui marche, mais apres c a toi de construire ta requete en fonction de ton formulaire et du langage que tu vas utiliser...
    Un exemple en ASP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "... WHERE MA_DATE BETWEEN TRUNC(TO_DATE('" & Request.Form("date_1") & "', 'DD/MM/YYYY'), 'MM') AND ADD_MONTHS(TRUNC(TO_DATE('" & Request.Form("date_2") & "', 'DD/MM/YYYY'), 'MM'), 1) "

  17. #17
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Donc si tu mets 10/07/2005 et 18/08/2005 tu veux les dates du 1er juillet au 31 aout c ca ?
    En effet mais ton code ne le permet tjs pas. Pourtant j'essaye sous toutes les formes possibles mais pas moyen d'y arriver

  18. #18
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Mon code le permet pas ?
    Franchement c bizarre la...
    Une question, la colonne surlaquelle tu fais ta clause WHERE c bien une date ?
    Quels resultats te donne ma requete ?

  19. #19
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je suppose que les dates saisies sont au format MM YYYY comme c'est indiqué dans le premier post, que DOS_CLOTURE_DATE est une date de la base et que la deuxième date est exclue, cequi explique le ADD_MONTH.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE TO_CHAR(DOS_CLOTURE_DATE, 'YYYYMM') BETWEEN TO_CHAR(TO_DATE('01 ' || '07 2005', 'DD MM YYYY'), 'YYYYMM')
                  AND TO_CHAR(ADD_MONTHS(TO_DATE('01 ' || '10 2005', 'DD MM YYYY'), -1), 'YYYYMM')
    Si c'est bien ce que tu veux il suffit de remplacer '07 2005' et '10 2005' par tes variables.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  20. #20
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Non les dates saisies sont au format DD MM YYYY mais justement, moi je veux que qd je fait le between, il ne prenne en compte que le MM YYYY

    Et oui tostinni ma variable sur lequel je fais un where est bien une date

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Between + date
    Par roots_man dans le forum ASP
    Réponses: 9
    Dernier message: 30/03/2006, 14h45
  2. Réponses: 5
    Dernier message: 21/03/2006, 21h39
  3. [Oracle 9] Date de dernière connexion
    Par allex2108 dans le forum Oracle
    Réponses: 7
    Dernier message: 15/02/2006, 08h14
  4. [VB6]Between date
    Par malhivertman1 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2006, 15h38
  5. [Oracle 9i] Date avec Heure + comparaison
    Par MinsK dans le forum Oracle
    Réponses: 8
    Dernier message: 21/11/2005, 12h18

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