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 :

Oracle 8i : Pb avec Add_Months


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut Oracle 8i : Pb avec Add_Months
    Bonjour,

    Je cherche à comprendre pourquoi la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select Add_Months('30/04/2006',3) from dual
    me renvoit le 31/07/2006 !!

    J'imagine que c'est parce que le 30/04 est le dernier jour du mois et que donc, Add_Months me renvoit le dernier jour du mois de juillet, mais bon....
    Pour notre application, j'aurais vraiment besoin que le Add_Months me renvoit le 30/07 et non le 31/07.

    Comment puis-je faire ?

    Merci par avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Par défaut
    Exact, je viens de vérifier dans la DOC :

    http://download-west.oracle.com/docs...tion.htm#76719
    ADD_MONTHS returns the date d plus n months. The argument n can be any integer. If d is the last day of the month or if the resulting month has fewer days than the day component of d, then the result is the last day of the resulting month. Otherwise, the result has the same day component as d.
    Je ne connaissais pas cette règle et il va falloir que je vérifie certains bouts de code....

    Je te conseille une recherche sur google ou sur ce forum, il doit y avoir des contournements (avec un decode pour vérifier si on est le dernier jour du mois).

    Sinon, je pense qu'avec un to_date, c'est plus propre (sinon tu as une conversion de date implicite, ce qui est toujours risqué) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select Add_Months(to_date('30/04/2006','DD/MM/YYYY'),3) from dual

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    Ok, je te remercie pour ta réponse.

    Du coup, il va falloir "bidouiller" un peu.

    A+

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Vous pouvez essayer de faire

    pour récupérer l'avant dernier jour du mois.

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    J'adore ce genre d'exercices. On lance des défis au boulot : Qui va trouver la requete la mieux optimisée - claire.

    J'ai gagné !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT LEAST(TO_CHAR(v_dates, 'DD') , TO_CHAR(ADD_MONTHS(v_dates, v_mois), 'DD')) || 
    		'/' || TO_CHAR(ADD_MONTHS(v_dates, v_mois), 'MM/YYYY') 
    FROM dual

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    Super !

    Merci à tous.

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

Discussions similaires

  1. [ORACLE 10g] souci avec un paquage libaio
    Par vbcasimir dans le forum Oracle
    Réponses: 23
    Dernier message: 11/04/2006, 11h19
  2. [Oracle] Oracle et problème avec les dates
    Par Nounoursonne dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/01/2006, 15h31
  3. [Oracle 9i] Date avec Heure + comparaison
    Par MinsK dans le forum Oracle
    Réponses: 8
    Dernier message: 21/11/2005, 12h18
  4. couplage base de données oracle et sqlserver avec c et c++
    Par mloul dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 22/11/2004, 14h00
  5. Réponses: 14
    Dernier message: 01/09/2003, 15h54

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