2010-11-17 8 views
0

J'ai importé une feuille de calcul des statistiques du gouvernement des États-Unis dans une table mysql dans le but de travailler à travers un tutoriel. Cependant, il semblerait que le gouvernement américain ait changé sa mise en forme de sorte que certaines figures numériques soient enveloppées dans des guillemets, les transformant en chaînes.Comment modifier le type de données d'une feuille de calcul importée dans mysql?

Par exemple, c'est le format des données séparées par des tabulations que je suis censé avoir téléchargé:

CN010010 01 001 "Comté Autauga, AL" 2005 23831 23061 770 3.2

Cependant, il ressemble à ceci: CN010010 01 001 "Autauga County, AL" 2005 "23,831" "23,061" 770 3,2

En conséquence les deux colonnes de données clés (les 23831 et 23061 bits) que je veux importer comme entiers vous inscrivez 0 - probablement parce qu'il ne répond pas au type de données.

Quelle est la meilleure solution pour résoudre ce problème, maintenant et dans le futur?

Merci d'avance.

+0

LOL il suffit de faire chaque colonne varchar (255) ;) –

+0

J'ai utilisé TextPad et ses fonctions regex pour gérer des situations comme celles-ci. –

Répondre

2

La "virgule" pourrait poser problème. Utilisez-vous les données de chargement pour cela?

définition de la table En supposant:

CREATE TABLE `t` (
    `code` varchar(255) DEFAULT NULL, 
    `state` char(2) DEFAULT NULL, 
    `city` char(3) DEFAULT NULL, 
    `name` varchar(255) DEFAULT NULL, 
    `year` int(11) DEFAULT NULL, 
    `pop1` int(11) DEFAULT NULL, 
    `pop2` int(11) DEFAULT NULL, 
    `diff` int(11) DEFAULT NULL, 
    `ratio` float DEFAULT NULL 
)

Voici importerait le fichier:

load data local infile "test.txt" 
into table t 
columns terminated by '\t' 
optionally enclosed by '"' 
(code, state, city, name, year, @var1, @var2, diff, ratio) 
set pop1=replace(@var1,",", ""), 
    pop2=replace(@var2, ",", "");

insérerait la ligne suivante:

 code: CN010010 
state: 01 
city: 001 
name: Autauga County, AL 
year: 2005 
pop1: 23831 
pop2: 23061 
diff: 770 
ratio: 3.2
+0

Oui, j'utilisais le chargement de données infile. Votre solution semble excellente. Je vais essayer. Merci pour votre temps. – elksie5000

+0

Tant que c'est génial ... je veux dire utile :) – Danosaure

+0

Fonctionne comme un régal - j'apprends encore en ce moment et ce sont des solutions comme ça qui m'aident à comprendre PHP, mySQL et toute l'approche du codage. :) – elksie5000