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

SQL Oracle Discussion :

SQL - Calcul de DATE sur Oracle 11g


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut SQL - Calcul de DATE sur Oracle 11g
    Bonjour,

    Dans une procédure, un calcul sur des dates ramène un message d'erreur selon les jours du mois sur lesquels se font les calcul.
    Jusqu'alors, cela fut "bidouillé" manuellement pour que ça passe.
    Comment corriger ?

    Le code d'origine est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select max(STAT_NUM_OPE) --into v_MAX_NUM_OPE
          from STAT_OPE    
    Where STAT_OPE_PERIODE = 'SEMESTRE'
         and STAT_OPE_D_EXTRACT > to_Date('20120205' - 5, 'YYYYMMDD')
    Après les tests suivants "from dual"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT to_Date('20130729' + 5,'YYYYMMDD') FROM DUAL;
    ou
    select to_Date('20130205' - 5,'YYYYMMDD') FROM DUAL;
    Nous avons le message erreur Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ORA-01847: le jour du mois doit être compris entre 1 et le dernier jour du mois
    01847. 00000 -  "day of month must be between 1 and last day of month"
    Comment procéder pour mettre en place le calcul sur ces dates pour que cela fonctionne à tous les coups ?

    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Il faut sortir le +5 ou -5 du TO_DATE, sans quoi il fait la somme avec la chaine de caractère passée comme valeur de date, avant de convertir au format date. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT '20130729' + 5 FROM DUAL
    renvoie 20130734, et le 34ème jour du mois n'existe pas...

    Il faut l'écrire de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT to_Date('20130729', 'YYYYMMDD') + 5 FROM DUAL
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut
    dgi77, merci !!!

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

Discussions similaires

  1. Stat non-calculées sur ORACLE 11G
    Par Vince7-7 dans le forum Administration
    Réponses: 0
    Dernier message: 16/09/2014, 14h17
  2. Equivalent de (Oui/Non) d'Access sur Oracle 11g
    Par faressam dans le forum Oracle
    Réponses: 4
    Dernier message: 21/03/2008, 13h43
  3. Probleme avec le format DATE sur ORACLE
    Par B&B dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/02/2008, 17h55
  4. Problème champs date sur Oracle 9i
    Par caiman2 dans le forum SQL
    Réponses: 2
    Dernier message: 25/01/2008, 09h58
  5. calcul de date sur un regroupement de champ en vb
    Par bazilus dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2006, 13h29

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