210 votes

Changer le type du champ varchar en entier : "ne peut pas être converti automatiquement en type integer".

J'ai une petite table et un certain champ contient le type " caractère variable ". J'essaie de le changer en " Entier mais le message d'erreur suivant s'affiche : "Le moulage n'est pas possible.

Existe-t-il un moyen de contourner ce problème ou dois-je simplement créer une autre table et y placer les enregistrements à l'aide d'une requête ?

Le champ ne contient que des valeurs entières.

0 votes

Quel ALTER TABLE spécifique avez-vous essayé et quel était le message d'erreur spécifique ?

0 votes

@muistooshort J'ai essayé d'utiliser alter depuis phppgadmin. J'ai sélectionné la colonne et essayé de saisir le nouveau type de champ. L'erreur est la suivante : SQL error: ERROR: column "MID" cannot be cast to type integer

3 votes

La première est de sauvegarder la table. Ensuite, vous pouvez créer une autre colonne (disons field2) de type entier dans la même table. Sélectionnez le cast to integer value du field1 dans le field2 . Puis renommez la colonne.

5voto

Maxime Boué Points 81

J'ai eu le même problème. J'ai commencé à réinitialiser le défaut de la colonne.

change_column :users, :column_name, :boolean, default: nil
change_column :users, :column_name, :integer, using: 'column_name::integer', default: 0, null: false

2voto

Sandip Rajput Points 21

Si vous travaillez dans un environnement de développement (ou dans un environnement de production, il se peut que vos données soient sauvegardées), il faut d'abord effacer les données du champ de la base de données ou mettre la valeur à 0.

UPDATE table_mame SET field_name= 0;

Après cela pour exécuter la requête ci-dessous et après avoir exécuté avec succès la requête, au schemamigration et après cela exécuter le migrate script.

ALTER TABLE table_mame ALTER COLUMN field_name TYPE numeric(10,0) USING field_name::numeric;

Je pense que ça va vous aider.

1voto

PAM Points 459

Si vous avez accidentellement ou non mélangé des nombres entiers avec des données textuelles, vous devez d'abord exécuter la commande de mise à jour ci-dessous (sinon la table alter ci-dessus échouera) :

UPDATE the_table SET col_name = replace(col_name, 'some_string', '');

3 votes

Vous seriez mieux avec quelque chose comme regexp_replace(col_name, '[^0-9.]','','g') si vous essayez de supprimer les caractères indésirables et les espaces blancs. Vous aurez besoin de quelque chose d'un peu plus sophistiqué si vous voulez retenir NaN y Inf y 10E42 la notation scientifique, cependant.

0voto

Tim G Points 1058

Chaînes vides ou nuls en caractères variables

Si vous avez une colonne contenant des chaînes vides ou des nuls, vous pouvez rencontrer le message d'erreur suivant :

invalid input syntax for type integer: ""

Solution

utiliser coalesce et un nullif pour que les chaînes vides et les nulls deviennent une valeur nulle.

ALTER TABLE peopleGroup ALTER numberPeople TYPE INT USING (cast ( coalesce( nullif( trim(numberPeople), '' ), '0' ) as integer ))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X