2010-08-26 5 views
4

J'ai une table avec des lignes comme celle-ci:MySQL: colonne divisée en deux

| Country.Number | Country | 
| US.01   | USA  | 
| US.02   | USA  | 

J'aimerais modifier ceci:

| Country | Number | Country | 
| US  | 01  | USA  | 
| US  | 02  | USA  | 

est-il un moyen facile de le faire?

+1

Vous devez d'abord vous assurer que vos colonnes ont des noms uniques. – Martijn

+0

Fait ce que je suggère une meilleure approche que si je le laisse comme le font des requêtes comme "US.%"? – NinjaCat

Répondre

11
  1. utiliser alter table - ajouter une nouvelle colonne.
  2. mise à jour colonne Numéro + Country.Number: utiliser substring_index

Requête:

UPDATE TABLE SET Number = SUBSTRING_INDEX('Country.Number', '.', -1), 
Country.Number = SUBSTRING_INDEX('Country.Number', '.', 1); 
  1. alter table changer le nom du champ de Country.Number
1

Commencez par ajouter une colonne numérique au tableau.

Ensuite, si toutes les entrées dans Country.Number ont un "." en supprimant les "US" et "#", vous récupérerez facilement toutes les lignes de la table et parcourrez chaque rangée.

Sur chaque ligne, vous pouvez utiliser la fonction explode() par exemple (d'autres existent) pour diviser le champ Country en 2 parties, "US" et "#", puis effectuer une insertion.

-1

Après avoir modifié votre tableau shema, vous pouvez utiliser cette requête pour le remplir avec des données:

INSERT INTO table_with_new_scheme (
    SELECT 
     explode('.', Country.Number)[0] as CountryAbbreviation, 
     explode('.', Country.Number)[1] as Number, 
     Country 
    FROM table_with_old_schema) 
+0

Il n'y a pas de fonction explosive dans MySQL? – CodeBrauer