Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Débuter
Débuter Forum d'entraide : Débuter en base de données avec PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/06/2011, 16h22   #1
Invité régulier
 
Fabrice Ravel
Inscription : avril 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Fabrice Ravel

Informations forums :
Inscription : avril 2010
Messages : 14
Points : 5
Points : 5
Par défaut Convertion de type

Bonjour,

J'ai une table avec un champ de type "text". Ce champ contient des valeurs numériques.

Je souhaite donc faire une conversion de type : de "character" vers "numeric double précision".

J'ai essayé plusieurs méthodes dont le fait de copier mon champ (type character) dans un nouveau champ (de type numeric double precision) par le biais d'une requête sql :

Code :
1
2
 
UPDATE ma_table SET mon_champ_1 = mon_champ_2
L'erreur suivante m'est renvoyée :

la colonne mon_champ_2 est de type double precision mais l'expression est de type character

Tout d'abord, est ce que j'emploie la bonne méthode ?
Si oui, quelle erreur je fais ?
Si non, quelle méthode serait-il préférable d'employer ?

D'avance merci pour votre aide
fafa63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 16h55   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 174
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 174
Points : 6 460
Points : 6 460
Il faut transformer le "text" en "double

Code :
1
2
 
UPDATE ma_table SET mon_champ_1 = mon_champ_2::DOUBLE
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 17h01   #3
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
La méthode la plus simple serait
Code :
1
2
3
ALTER TABLE latable ALTER COLUMN lacolonne 
  TYPE double precision
 USING CAST(lacolonne AS double precision)
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 10h03   #4
Invité régulier
 
Fabrice Ravel
Inscription : avril 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Fabrice Ravel

Informations forums :
Inscription : avril 2010
Messages : 14
Points : 5
Points : 5
Bonjour,

Tout d'abord merci à MaitrePylos et estofilo pour leur aide.

J'ai donc testé les 2 requêtes.

1) La requête de MaitrePylos a fonctionné dès lors que j'ai créé un deuxième champ de type double précision ce qui donne :

Code :
UPDATE ma_table SET ma_colonne2 = ma colonne1::DOUBLE PRECISION
Cependant, le nombre contenu dans ma colonne1 possède jusqu'à 15 chiffres après la virgule, et lors de la conversion de type un arrondi est généré. Exemple : 8.179461352958946 devient 8.17946135295895
Je ne comprends pas pourquoi ?
Si j'utilise "double précision" c'est justement pour conserver cette précision.

2) Quant à la requête estofilo j'obtiens un message d'erreur : "erreur de syntaxe sur ou près de ALTER". Je pense que l'erreur provient clairement de moi et de mon manque d'expérience en matière de constitution de requêtes SQL. Je dois certainement oublier une partie de la syntaxe ?

Merci d'avance.
fafa63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 10h16   #5
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 174
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 174
Points : 6 460
Points : 6 460
Essaye ceci

Code :
1
2
 
UPDATE ma_table SET ma_colonne2 = ma colonne1::NUMERIC(10,15)
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 11h08   #6
Invité régulier
 
Fabrice Ravel
Inscription : avril 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Fabrice Ravel

Informations forums :
Inscription : avril 2010
Messages : 14
Points : 5
Points : 5
Ca fonctionne !!! (en créant tout d'abord une colonne "ma_colonne2" de type "numeric (17,15))

Code :
UPDATE ma_table SET ma_colonne2 = ma_colonne1::NUMERIC (17,15)
Merci beaucoup pour l'aide apportée et aussi pour la réactivité
fafa63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h41.


 
 
 
 
Partenaires

Hébergement Web