Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 19/06/2012 10:00:11
- youssef
- Membre
transtypage
Bonjour
en crant une table j'ai mis un champs qui à l'origine devrait être numérique en varchar,
est ce qu'il est possible de le modifier en numérique, sachant que toutes les valeurs sont numérique
est ce que postgres procède à un prototypage automatique ?
genre faire la somme de deux valeurs numérique même si le champs est déclarer string ou faut il passer par une autre méthode
Merci
Hors ligne
#2 19/06/2012 10:07:05
- gleu
- Administrateur
Re : transtypage
Pas de conversion automatique. Il faut lui indiquer qu'il faut convertir le champ text en champ integer par exemple. Le plus simple cependant est de modifier le type de la colonne (long mais meilleur après pour les perfs).
Guillaume.
Hors ligne
#3 19/06/2012 11:38:51
- youssef
- Membre
Re : transtypage
comment changer le type de la colonne ?
Hors ligne
#4 19/06/2012 11:40:16
- gleu
- Administrateur
Re : transtypage
En utilisant la commande ALTER TABLE (http://docs.postgresql.fr/9.1/sql-altertable.html).
Guillaume.
Hors ligne
#5 19/06/2012 11:57:16
- youssef
- Membre
Re : transtypage
ah ok, je connais bien alter table
merci
une autre question, comment traiter cette erreur :
ERROR: numeric field overflow
DETAIL: A field with precision 14, scale 13 must round to an absolute value less than 10^1.
********** Erreur **********
ERROR: numeric field overflow
État SQL :22003
Détail :A field with precision 14, scale 13 must round to an absolute value less than 10^1.
j'ai un champs string qui est un numérique d'une précision de 16 et d'une echel de 15
quand j'essaye de faire
SELECT sum(to_number(monChamps ,'9D999999999999999'))
FROM matable ;
j'ai cette erreur
Merci à vous
Hors ligne
#6 19/06/2012 12:44:39
- gleu
- Administrateur
Re : transtypage
Quelle version de PostgreSQL utilisez-vous ? car pour moi, cette requête ne passe pas.
Guillaume.
Hors ligne
#7 19/06/2012 17:05:46
- youssef
- Membre
Re : transtypage
j'ai la version 9.1
Hors ligne
#8 19/06/2012 17:40:11
- gleu
- Administrateur
Re : transtypage
La même requête exacte me met un message d'erreur. Donc je suppose que vous avez modifié la requête (notamment pour l'anonymiser mais que la modification fait qu'elle n'est plus exécutable sur une 9.1). Il faudrait nous donner la vraie requête si vous voulez qu'on puisse vous aider.
Guillaume.
Hors ligne
#9 19/06/2012 17:56:07
- youssef
- Membre
Re : transtypage
j'ai seulement changé le nom de la table et le nom de champs
par maTable et monChaémps,
même avec les bon noms ça marchera pas pour vous vu que vous ne disposer pas de la table;
un copier coller de la requête telle que je l'ai mise retournera surement une erreur
Hors ligne
#10 19/06/2012 22:14:33
- rjuju
- Administrateur
Re : transtypage
L'erreur indique qu'une des valeur de "monChamps" a une valeur absolue >= 10, alors que votre conversion demande un nombre avec un seul chiffre avant la virgule.
Regardez dans votre table si c'est bien le cas (par exemple SELECT to_number(monChamps ,'9999D999999999999999') FROM matable where to_number(monChamps ,'9999D999999999999999') >= 10.0 ), et corrigez le problème (soit en changeant la conversion avec plus de chiffres avant la virgule, soit en modifiant les enregistrements concernés).
Vous pourrez alors modifier le type de votre champ.
Julien.
https://rjuju.github.io/
Hors ligne
#11 19/06/2012 22:55:17
- gleu
- Administrateur
Re : transtypage
Évidemment, j'ai créé une table avec une colonne de type numeric. Et l'erreur que j'ai n'a rien à voir avec une table inexistante :
postgres=# select sum(to_number(champ,'9D999999999999999')) from toto;
ERROR: function to_number(numeric, unknown) does not exist
LINE 1: select sum(to_number(champ,'9D999999999999999')) from toto;
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Guillaume.
Hors ligne
#12 20/06/2012 08:52:34
- youssef
- Membre
Re : transtypage
la fonction to_number exite bien,
http://www.postgresql.org/docs/8.3/stat … tting.html
mais par contre le champs doit être en varchar, d'ou lebut d'utiliser to_number pour pouvoir effectuer une somme,
il n'est pas possible de faire un to_number sur un champ numeric, parce que la fonction accepte deux arguments texte.
Hors ligne
#13 20/06/2012 08:57:37
- youssef
- Membre
Re : transtypage
L'erreur indique qu'une des valeur de "monChamps" a une valeur absolue >= 10, alors que votre conversion demande un nombre avec un seul chiffre avant la virgule.
Regardez dans votre table si c'est bien le cas (par exemple SELECT to_number(monChamps ,'9999D999999999999999') FROM matable where to_number(monChamps ,'9999D999999999999999') >= 10.0 ), et corrigez le problème (soit en changeant la conversion avec plus de chiffres avant la virgule, soit en modifiant les enregistrements concernés).
Vous pourrez alors modifier le type de votre champ.
Merci pour ton explication,
j'avais pas bien compris le message d'erreur
effectivement, y avait des valeurs dont le nombre avant la virgule est supérieur à 10
j'ai changé le format de conversion, et j'ai eu le bon résultat que je cherchais
Hors ligne
Pages : 1