Vous n'êtes pas identifié(e).
Pages : 1
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
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
comment changer le type de la colonne ?
Hors ligne
En utilisant la commande ALTER TABLE (http://docs.postgresql.fr/9.1/sql-altertable.html).
Guillaume.
Hors ligne
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
Quelle version de PostgreSQL utilisez-vous ? car pour moi, cette requête ne passe pas.
Guillaume.
Hors ligne
j'ai la version 9.1
Hors ligne
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
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
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
É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
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
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