Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre éprouvé Avatar de Filippo
    Homme Profil pro Philippe
    Statisticien
    Inscrit en
    mai 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 41
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : mai 2004
    Messages : 689
    Points : 413
    Points
    413

    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 :
    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.

    "Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"

  2. #2
    Membre Expert Avatar de Garuda
    Homme Profil pro Philippe CHIRCOP
    Chef de projet
    Inscrit en
    juin 2007
    Messages
    1 244
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe CHIRCOP
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : juin 2007
    Messages : 1 244
    Points : 1 958
    Points
    1 958

    Par défaut

    Essaie de formater la chaine avant de transformer en date
    Code :
    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 10.2.0.4 (RAC) - Forms6i patch 17 - Toad 12 - sharePoint 2010

  3. #3
    Membre éprouvé Avatar de Filippo
    Homme Profil pro Philippe
    Statisticien
    Inscrit en
    mai 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 41
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : mai 2004
    Messages : 689
    Points : 413
    Points
    413

    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 :
    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.

    "Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro Philippe CHIRCOP
    Chef de projet
    Inscrit en
    juin 2007
    Messages
    1 244
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe CHIRCOP
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : juin 2007
    Messages : 1 244
    Points : 1 958
    Points
    1 958

    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 10.2.0.4 (RAC) - Forms6i patch 17 - Toad 12 - sharePoint 2010

  5. #5
    Expert Confirmé Sénior Avatar de mnitu
    Homme Profil pro Marius Nitu
    Ingénieur développement logiciels
    Inscrit en
    octobre 2007
    Messages
    4 644
    Détails du profil
    Informations personnelles :
    Nom : Homme Marius Nitu
    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 : 4 644
    Points : 9 146
    Points
    9 146

    Par défaut

    Cherchez les valeurs de la colonne en question ayant une longueur inférieure à 7 caractères.

  6. #6
    Membre Expert Avatar de Garuda
    Homme Profil pro Philippe CHIRCOP
    Chef de projet
    Inscrit en
    juin 2007
    Messages
    1 244
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe CHIRCOP
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : juin 2007
    Messages : 1 244
    Points : 1 958
    Points
    1 958

    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 10.2.0.4 (RAC) - Forms6i patch 17 - Toad 12 - sharePoint 2010

  7. #7
    Membre éprouvé Avatar de Filippo
    Homme Profil pro Philippe
    Statisticien
    Inscrit en
    mai 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 41
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : mai 2004
    Messages : 689
    Points : 413
    Points
    413

    Par défaut

    Merci pour vos idées.

    Code :
    select distinct length(to_char(MyVar))from MyTable;
    renvoie un seul enregistrement de valeur 8.

    Et
    Code :
    select MyVar from MyTable where MyTable.MyVar<10000000;
    ne renvoie aucun enregistrement.
    "Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"

  8. #8
    Membre Expert Avatar de Garuda
    Homme Profil pro Philippe CHIRCOP
    Chef de projet
    Inscrit en
    juin 2007
    Messages
    1 244
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe CHIRCOP
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : juin 2007
    Messages : 1 244
    Points : 1 958
    Points
    1 958

    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 10.2.0.4 (RAC) - Forms6i patch 17 - Toad 12 - sharePoint 2010

  9. #9
    Membre éprouvé Avatar de Filippo
    Homme Profil pro Philippe
    Statisticien
    Inscrit en
    mai 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 41
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : mai 2004
    Messages : 689
    Points : 413
    Points
    413

    Par défaut

    Impeccable, j'ai trouvé, il y avait un 31 Septembre !

    La syntaxe
    Code :
     to_date(to_char(MyTable.MyVar,'FM00000000'),'YYYYMMDD')
    va bien et le code suivant fonctionne

    Code :
    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 !

    "Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •