2014-09-16 6 views
0

Comment faire quand je veux Importer un fichier csv/excel mais je veux que le contenu soit dans une colonne spécifique?MySQL - Importer un fichier .CSV/Excel dans MySQL

J'ai 6 colonnes dans ma base de données. Appelons-le simplement a, b, c, d, e, f.

Je souhaite insérer le contenu dans c, d, e à partir du fichier Excel. Le contenu des colonnes a, b et f serait généré automatiquement. J'utilise le script LOAD DATA INFILE.

Répondre

0

Une option consiste à spécifier des variables définies par l'utilisateur en tant que cible pour un fichier, à la place d'un nom de colonne dans la liste de colonnes à la fin de l'instruction LOAD DATA.

Par exemple (en omettant la plupart de la syntaxe):

LOAD DATA ... 
...  
(@dummy1, @dummy2, c, d, e, @dummy3) 

Le premier champ d'une ligne sera affectée à la variable @ dummy1 définie par l'utilisateur, le second champ à l'autre variable définie par l'utilisateur, le troisième , les quatrième et cinquième champs seront assignés aux colonnes c, d et e (respectivement), le sixième champ sera assigné à une autre variable définie par l'utilisateur.

Si vous souhaitez fournir une valeur pour une colonne qui est le résultat d'une expression, vous pouvez utiliser la clause SET ...

LOAD DATA ... 
...  
(@a, @b, c, d, e, @dummy3) 
SET a = UPPER(@a) 
    , b = STR_TO_DATE(@b,'%m/%d/%Y') 
    , f = CONCAT(@a,@b) 

MISE À JOUR

Si vous ne avoir trois champs dans le csv, et vous voulez attribuer le premier champ à la colonne c, la deuxième valeur de champ à la colonne d, et la troisième valeur de champ à la colonne e ...

LOAD DATA ... 
... 
(c, d, e) 

Il est la position du nom de colonne dans la liste (col_or_user_var,...) qui détermine la valeur du champ sera attribué à quelle colonne. Pour "ignorer" un champ, l'affecter à une variable définie par l'utilisateur ... le champ dans le fichier doit être affecté à quelque chose, et si vous ne voulez pas l'assigner à une colonne, l'assigner à l'utilisateur variable.

Il n'était pas clair dans votre question combien de champs étaient dans le fichier, et quel champ devrait être affecté à quelle colonne.

+0

Cela affecterait-il la structure du csv? J'ai lu la partie SET mais je pense que cela pourrait ruiner la base de données. Le csv/excel contient les 3 colonnes qui doivent être insérées dans c, d, e. Il pourrait l'insérer dans a, b et c alors la partie SET mettrait la valeur autogénérée en a et b ce qui fait du c la seule partie utilisable. Corrigez-moi si je me trompe :) – Gibs

+0

Vous n'avez pas besoin d'utiliser la clause SET; C'est entièrement facultatif. Chaque champ de la ligne sera affecté à la colonne * ou * à la variable définie par l'utilisateur dans la liste des colonnes, à la position correspondante. Si vous n'avez pas besoin de la valeur du premier champ pour quelque chose, il suffit de l'assigner à une variable définie par l'utilisateur ... et voila que la valeur du champ a disparu. (Le premier exemple est équivalent à un INSERT INTO mytable (c, d, e) .Toutes les colonnes de la table qui ne sont pas référencées se verront attribuer le DEFAULT défini pour la colonne (la clause SET vous donne accès aux valeurs de les champs affectés à var – spencer7593