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 :

to_date me donne error ORA-01861: literal does not match format string


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 14
    Points : 16
    Points
    16
    Par défaut to_date me donne error ORA-01861: literal does not match format string
    Hello j'essaye d'utiliser java pour filtrer une requete sql sous talend mais la base de donnée oracle me retourne ORA-01861: literal does not match format string

    Voici mon code java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    Date supply_date_last_filter =  new Date();
     
    Date supply_date_start_filter;
     
    supply_date_last_filter = TalendDate.parseDate("ddMMyyyy",TalendDate.formatDate("ddMMyyyy", new Date()));
     
    if (context.work_METI_last_date != null && !"".equals(context.work_METI_last_date)) {
         supply_date_last_filter = TalendDate.parseDate("ddMMyyyy",context.work_METI_last_date);
    }
     
    supply_date_start_filter = TalendDate.addDate(supply_date_last_filter, - Integer.parseInt(context.work_METIstore_last_days), "dd");
     
    String supply_date_start_filter_str = TalendDate.formatDate("ddMMyyyy",supply_date_start_filter);
     
    String supply_date_last_filter_str = TalendDate.formatDate("ddMMyyyy",supply_date_last_filter);
    globalMap.put("supply_date_start_filter", supply_date_start_filter_str);
    globalMap.put("supply_date_last_filter", supply_date_last_filter_str);
    Et voici ma requete oracle sous talend :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    "SELECT substr(fld_znvaleur, 5, 3) store_code, substr(fld_znvaleur, 8, 8) order_number, substr(fld_znvaleur, 16, 8) order_date, std_cdsitu, std_lbsitu, wcd_tydemand, tyd_lbtypdem
    FROM " + context.link_METIsupply_DB_schema + ".mgfld
    INNER JOIN " + context.link_METIsupply_DB_schema + ".mgfle
        ON (fle_cdflux = fld_cdflux
        AND fle_notrait = fld_notrait)
    LEFT JOIN " + context.link_METIsupply_DB_schema + ".mgwcd
        ON (wcd_nocdemag = to_number(substr(fld_znvaleur, 8, 8))
        AND wcd_noclcash = to_number(substr(fld_znvaleur, 5, 3)))
    LEFT JOIN  " + context.link_METIsupply_DB_schema + ".mgstd
        ON (wcd_tydemand = std_tydemand and wcd_cdetat = std_cdsitu)
    LEFT JOIN  " + context.link_METIsupply_DB_schema + ".mgtyd
        ON (tyd_tydemand = wcd_tydemand)
    WHERE fld_cdflux = 'DDE'
      AND fld_cdfichier = 'DDE_E'
      AND substr(fld_znvaleur, 16, 8) BETWEEN to_date('" + ((String) globalMap.get("supply_date_start_filter")) + "','DDMMYYYY')
        AND to_date('" + ((String) globalMap.get("supply_date_last_filter")) + "','DDMMYYYY')
    and substr(fld_znvaleur, 16, 8) <> '        '
    AND substr(fld_znvaleur, 5, 3) in " + context.work_METIstore_list
    Je suis un peu perdu là car je donne bien un string de la bonne longeur à la fonction to_date...
    ps les quote au début et à la fin sont obligatoire sous talend.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Essaye d'afficher la requête construite au lieu de l'exécuter pour t'assurer qu'elle est correctement formée.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Tu compares une chaine de caractères avec des dates, ce qui implique des conversions implicites et mène souvent à ce genre d'erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AND substr(fld_znvaleur, 16, 8) BETWEEN to_date('" + ((String) globalMap.get("supply_date_start_filter")) + "','DDMMYYYY')
        AND to_date('" + ((String) globalMap.get("supply_date_last_filter")) + "','DDMMYYYY')
    il faut également que tu convertisses fld_znvaleur en date.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    Je dois donc ajouter un to_date ce qui me donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    AND to_date(substr(fld_znvaleur, 16, 8)) BETWEEN to_date('" + ((String) globalMap.get("supply_date_start_filter")) + "','DDMMYYYY')
        AND to_date('" + ((String) globalMap.get("supply_date_last_filter")) + "','DDMMYYYY')
    J'ai donc un nouveau message d'erreur qui est le suivant : tDBInput_3 ORA-01858: a non-numeric character was found where a numeric was expected

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Tu dois aussi préciser le format de la date dans ce TO_DATE. Par exemple, si le format dans tes données source est DDMMYYYY, alors:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_date(substr(fld_znvaleur, 16, 8), 'DDMMYYYY')

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    C'était une petit faute de frappe de ma part, j'avais bien précisé le format de date.

    Mais cela n'a pas marché sous talend, j'ai fini par changer la requête afin de faire fonctionner le flux.


    Merci pour votre aide

Discussions similaires

  1. ORA-01861: literal does not match format string
    Par unix27 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 07/01/2013, 19h02
  2. ORA-01861: literal does not match format string
    Par Bat91 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 31/08/2010, 11h30
  3. ORA-01861: literal does not match format string
    Par labolabs dans le forum PL/SQL
    Réponses: 3
    Dernier message: 08/02/2010, 10h31
  4. [Oracle] ORA-01861: literal does not match format string
    Par habasque dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/07/2008, 21h57
  5. Réponses: 11
    Dernier message: 08/10/2004, 15h12

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