PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 15/12/2014 18:50:21

trauqnej
Membre

la colonne est de type numeric mais l'expression est de type text

faisant suite à mes recherche : voir ( http://forums.postgresql.fr/viewtopic.php?id=3400)
je voudrais, maintenant mettre dans un champ "numeric" une donnée-numérique venant d'un champ texte.

j'ai essayé un joli :
insert into public.tableB2(champBB22,champBB33) select champAA11='O' , cast(CC33 as numeric) from public. tableA1;
cela fonctionne s'il y a des données (de type numérique, bien entendu) dans le champ CC33
malheureusement s'il n'y a pas de données ==> contenu du champ = NULL
alors j'ai une erreur :
    syntaxe en entrée invalide pour le type numeric : «  »

Trauq

Hors ligne

#2 15/12/2014 18:57:45

trauqnej
Membre

Re : la colonne est de type numeric mais l'expression est de type text

Je Me réponds :
une des solution est de faire une condition :
insert into public.tableB2(champBB22,champBB33) select champAA11='O' ,
case when c33='' then NULL ELSE cast(c33 as numeric) end      --- permet de prendre la valeur du champ ou de mettre NULL
from public. tableA1;

la question est :
Existe-t-il plus simple ?

Cordialement,
Trauq

Hors ligne

#3 15/12/2014 20:01:18

gleu
Administrateur

Re : la colonne est de type numeric mais l'expression est de type text

Non, il n'existe pas plus simple. Il faut bien lui dire comment convertir une chaîne vide.


Guillaume.

Hors ligne

#4 16/12/2014 00:51:15

trauqnej
Membre

Re : la colonne est de type numeric mais l'expression est de type text

J'ai regardé en diagonale les fonction ya peut etre moyen de faire un truc avec ;
Mais j'ai pas compris grand chose.
Vous auriez un bon tuto ditactique la-d'ssus ?

Trauq

Hors ligne

#5 16/12/2014 01:16:44

rjuju
Administrateur

Re : la colonne est de type numeric mais l'expression est de type text

Il y a du y avoir un problème avec votre message hmm De quelle fonction parlez-vous ?

Hors ligne

#6 16/12/2014 10:43:34

ruizsebastien
Membre

Re : la colonne est de type numeric mais l'expression est de type text

Vous parlez des fonctions du catalogue postgres ? (pg_catalog)


Cordialement,

Sébastien.

Hors ligne

#7 16/12/2014 14:46:43

trauqnej
Membre

Re : la colonne est de type numeric mais l'expression est de type text

Bonjour,
j'ai pris la doc 9.1 en pdf
le chapitre 9.3 parle de fonction
(et que l'on peut en créer (page219/1957))
Trauq

Hors ligne

#8 17/12/2014 02:48:31

rjuju
Administrateur

Re : la colonne est de type numeric mais l'expression est de type text

Merci de pointer un lien vers la version en ligne. J'ai regardé le fichier pdf de la doc 9.1 (je suppose en français) et la page 219 ne mentionne pas de création de fonction.

Hors ligne

#9 17/12/2014 18:55:26

trauqnej
Membre

Re : la colonne est de type numeric mais l'expression est de type text

http://docs.postgresql.fr/9.1/pg91.pdf
!! 219/1957 !!
je mets le résumé ci-dessous :

-- aplatir un tableau 2D
CREATE OR REPLACE FUNCTION unnest2(anyarray)
RETURNS SETOF anyelement AS $$
.....

Cela parle bien de fonction.

Après.... dans quel cas cela est utilisé...
Je pense qu'il y aurait peut-être moyen de faire qqChose avec
mais n'étant pas encore assez barbu-postgres.... j'imagine.

Trauq

Hors ligne

#10 17/12/2014 22:22:14

gleu
Administrateur

Re : la colonne est de type numeric mais l'expression est de type text

Sincèrement, je ne vois pas en quoi "créer la fonction, exécuter la requête avec fonction, supprimer la fonction" serait plus simple que "exécuter la requête sans fonction". Mais bon, si ça vous amuse :

CREATE FUNCTION tropfacile(text) RETURNS numeric LANGUAGE sql AS $$SELECT CASE WHEN $1='' THEN NULL ELSE CAST($1 AS numeric) END;$$;
INSERT INTO public.tableB2(champBB22,champBB33)
  SELECT champAA11='O', tropfacile(c33) FROM public. tableA1;

Guillaume.

Hors ligne

Pied de page des forums