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

Requêtes MySQL Discussion :

LOAD DATA INFILE et formatage date


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 12
    Par défaut LOAD DATA INFILE et formatage date
    Bonjour à toutes et tous,

    Voilà, je lis des données à partir d'un fichier .csv et je les inclue dans un table. Mon problème est que dans le fichier, le format de date est dd/mm/yyyy et je veux donc le convertir en yyyy-mm-dd pour pouvoir l'insérer dans la table MySQL. Pour le moment ca ne marche pas...

    Voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    LOAD  DATA  INFILE  'Classeur1.csv' INTO  TABLE mydb.prestations 
    FIELDS  TERMINATED  BY  ';' 
    LINES  TERMINATED  BY  '\n' 
    IGNORE 1 LINES
    (createur,
    @date,
    idPrestation,
    description)
    SET dateCreation = DATE_FORMAT(STR_TO_DATE(@date,'%d/%m/%Y'),'%Y-%m-%d');
    Voici l'erreur remontée :

    MySQL a répondu:


    #1064 - Erreur de syntaxe près de '@date , idPrestation, description ) SET dateCreation = DATE_FORM' à la ligne 1


    J'avoue avoir testé pas mal de combinaisons mais sans succès, je demande donc votre aide...

    Merci par avance !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par lafouine1986 Voir le message
    #1064 - Erreur de syntaxe près de '@date , idPrestation, description ) SET dateCreation = DATE_FORM' à la ligne 1
    Ça signifie que l'erreur se situe juste avant @date.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 12
    Par défaut
    Oui, merci pour cette précision, cependant et pour être honnête, cela ne m'avance pas énormément. Je me doute qu'il y a une erreur sur la ligne, et qu'il est probable qu'elle se situe avant @date, mais quelle est-elle, je me le demande bien...

    Si vous avez des idées, je suis preneur !

    Merci par avance!

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Et, bien sûr, tu ne peux pas modifier le format dans la source csv en amont ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 12
    Par défaut
    bonjouer,

    merci de ton aide !
    Alors il est possible de modifier le format de la date dans le fichier, le problème c'est que cette opération doit être faite par un opérateur, et qui dit opérateur en plus, dit erreurs potentielles ou oubli, donc je souhaitais au maximum automatiser le processus.

    Si je n'arrive pas faire ce que je veux, ce sera la solution de secours...

    Ce qui me dérange en fait c'est que c'est une erreur de syntaxe, donc ca semble possible de le faire, la commande existe !

    Merci par avance pour votre aide !

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Je trouve assez maladroit d'utiliser un mot-clef, date, pour un nom de colonne.
    Il faudrait le changer pour un mot équivalent comme jour. Perso, face à un mot clef j'opte pour son équivalent en espéranto (ici dato).
    L'@ dans la liste des colonnes n'est-il pas à l'origine du problème ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tout à fait d'accord avec Maljuna Kris : on ne doit pas utiliser 'date' comme nom de colonne.
    D'ailleurs, 'date' tout seul ne veut pas dire grand chose :
    - Date de création ?
    - Date d'enregistrement ?
    - Date de début ?
    - Date de fin ?
    - Date de prise en compte ?
    - Date de transmission à la personne responsable ?
    Il y a sûrement une manière plus explicite de nommer cette colonne.
    De plus, personnellement, je préfixe toujours les noms de colonnes de l'initiale ou des premières lettres de la table. Puisque il semble s'agir ici de prestations, préfixez votre colonne par P : PDateSignificationDeLeDate.

    Si j'en crois la version originale de la doc MySQL, @ sert à affecter la valeur de la colonne correspondante du fichier source à une variable :
    User variables in the SET clause can be used in several ways. The following example uses the first input column directly for the value of t1.column1, and assigns the second input column to a user variable that is subjected to a division operation before being used for the value of t1.column2:
    LOAD DATA INFILE 'file.txt'
    INTO TABLE t1
    (column1, @var1)
    SET column2 = @var1/100;
    Votre syntaxe semble correcte mais juste au dessus de cet extrait, il est dit aussi ceci :
    Before MySQL 5.0.3, the column list must contain only names of
    columns in the table being loaded, and the SET
    clause is not supported. As of MySQL 5.0.3, the column list can
    contain either column names or user variables. With user
    variables, the SET clause enables you to
    perform transformations on their values before assigning the
    result to columns.
    Votre syntaxe avec le formatage de date n'est peut-être pas reconnu par votre version de MySQL ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 12
    Par défaut
    merci pour vos réponses et votre aide !

    Simplement pour revenir sur l'intitulé @date, ma colonne s'appelle bien dateCreation et pas simplement date car c'est évidemment pas explicite et c'est un mot clé.
    J'ai utilisé ce @date en lisant sur un autre site que cela permettait de faire comme une référence à la colonne dans la table, une sorte de variable temporaire dans laquelle on stocke l'information plus tard.

    En clair, à cette étape :
    (createur,
    @date,
    idPrestation,
    description)

    le @date est une variable, et est utilisée pour que l'on puisse compléter plus tard, et à l'étape suivante :
    SET dateCreation = DATE_FORMAT(STR_TO_DATE(@date,'%d/%m/%Y'),'%Y-%m-%d');

    on affecte dans le champ dateCreation la valeur de @date que l'on a modifié depuis (date_format et autres).

    Visiblement ma compréhension n'est peut etre pas la bonne...Je testerai avec un autre nom de variable déjà...Enfin concernant la version de MySQL, c'est celle incluse dans easyphp 1.7, je regarderai laquelle c'est demain !

    Merci pour votre aide !

Discussions similaires

  1. LOAD DATA INFILE et date au format jj/mm/annee
    Par JoN28fr dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 14/03/2008, 19h30
  2. load data infile et format date
    Par Mathieu72 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/01/2007, 12h59
  3. probleme avec "LOAD DATA INFILE" et les b
    Par Koo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/07/2004, 09h37
  4. Problème avec LOAD DATA INFILE
    Par ka0z dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 04/06/2004, 14h59
  5. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 11h58

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