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 :

[11g] Conversion date numérique en date -ORA-01840


Sujet :

SQL Oracle

  1. #1
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut [11g] Conversion date numérique en date -ORA-01840
    Bonjour,
    je lis un champ au format numérique Number(8).
    Les valeurs de ce champ représentent des dates, par exemple 19941231.

    Souhaitant effectuer des comparaison entre dates, j'essaie de convertir ce champ en date Oracle avec le requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct to_date(to_char(MyTable.MyDate),'YYYYMMDD') from MyTable;
    J'obtiens l'erreur suivante : ORA-01840: valeur entrée pas assez longue pour le format de la date

    J'ai vérifié les valeurs possibles de MyDate, il n'y a pas de valeur nulle, les valeurs pour le mois vont de 1 à 12 et celles du jour vont de 1 à 31.

    Si quelqu'un a une idée, je suis preneur.

    Merci.

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  2. #2
    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
    Essaie de formater la chaine avant de transformer en date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT to_date(to_char(MyTable.MyDate,'FM00000000'),'YYYYMMDD') FROM MyTable;
    Le probléme vient surement de l'année, et pas du mois ni du jour !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci Philippe,
    maintenant j'obtiens l'erreur : ORA-01843: ce n'est pas un mois valide


    J'ai essayé de joué sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set nls_date_format='YYYYMMDD';
    Je conserve l'erreur ORA-01843: ce n'est pas un mois valide.

    Bon enfin j'avance, je vais y arriver.

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  4. #4
    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
    C'est surement que les mois (ou les jours) n'ont pas le 0 significatif !
    EX 2014112 pour 20140112
    Aucune solution si ce n'est detecter les erreurs successivement sur les jours, les mois et les années auparavant !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Cherchez les valeurs de la colonne en question ayant une longueur inférieure à 7 caractères.

  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
    Citation Envoyé par mnitu Voir le message
    Cherchez les valeurs de la colonne en question ayant une longueur inférieure à 7 caractères.
    Ou plutot les NOMBRES inférieurs à 10000000 !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  7. #7
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci pour vos idées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct length(to_char(MyVar))from MyTable;
    renvoie un seul enregistrement de valeur 8.

    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select MyVar from MyTable where MyTable.MyVar<10000000;
    ne renvoie aucun enregistrement.
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  8. #8
    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
    Alors il faut découper la chaine en 4 troncons (substr) année, mois,jour et mois/jour puis voir ou ca pêche (du genre jour= 30 pour le mois 02 ou mois et jour inversé !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  9. #9
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Impeccable, j'ai trouvé, il y avait un 31 Septembre !

    La syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     to_date(to_char(MyTable.MyVar,'FM00000000'),'YYYYMMDD')
    va bien et le code suivant fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    alter session set nls_date_format='YYYYMMDD';
    select distinct to_date(to_char(MyTable.MyVar,'FM00000000'),'YYYYMMDD')
         from MyTable
         where to_number(substr(to_char(MyTable.MyVar),5,2)) <>9
         and to_number(substr(to_char(MyTable.MyVar),7,2)) <>31
    ;
    Merci beaucoup !

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

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

Discussions similaires

  1. [AC-2003] convertir date texte en date numérique
    Par cgabidj dans le forum Access
    Réponses: 7
    Dernier message: 25/07/2014, 10h49
  2. Reformater date française en date numérique
    Par Toiine dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2012, 18h12
  3. Transformation de dates numériques en date string
    Par mamour71 dans le forum MATLAB
    Réponses: 6
    Dernier message: 11/06/2012, 15h23
  4. [XL-2007] couleur cellule date differente si date passee, ou date du jour
    Par chris09300 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/03/2011, 09h24
  5. Conversion de numérique en date
    Par cuterate dans le forum Access
    Réponses: 2
    Dernier message: 20/03/2008, 16h17

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