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 27/02/2013 16:32:18

damalaan
Membre

formatage de champ

Bonjour

Suite à un import de fichier, je formate mes champs et j'ai un souci sur un champ qui au départ est en texte (et qui doit devenir entier) avec des lignes vides et d'autre avec des nombres.
extrait de ma requête :

CASE imp_germes
	WHEN  null THEN null
	ELSE imp_germes::integer
END

ERREUR:  syntaxe en entrée invalide pour l'entier : «  »

********** Erreur **********

ERREUR: syntaxe en entrée invalide pour l'entier : «  »
État SQL :22P02

j'ai testé sur un champ où je suis sûr qu'il n'y a pas de ligne vide et celà fonctionne.

Merci de votre aide

Hors ligne

#2 27/02/2013 16:37:13

Marc Cousin
Membre

Re : formatage de champ

Les blancs lui posent évidemment problème, puisqu'il ne sait pas les convertir. Il faut que vous leur donniez une valeur explicitement. Quelque chose comme ça:

CASE imp_germes
	WHEN  null THEN null
        WHER '' THEN -1
	ELSE imp_germes::integer
END

Marc.

Hors ligne

#3 27/02/2013 16:40:27

damalaan
Membre

Re : formatage de champ

mais du coup les null qui doivent rester null ne sont plus null !!??

Hors ligne

#4 27/02/2013 17:04:05

Marc Cousin
Membre

Re : formatage de champ

pourquoi ? null et ' ' c'est différent

bon par contre, j'avais mis mes moufles tout à l'heure:

CASE imp_germes
	WHEN  null THEN null
        WHEN ' ' THEN -1
	ELSE imp_germes::integer
END

Marc.

Hors ligne

#5 27/02/2013 17:11:57

damalaan
Membre

Re : formatage de champ

les moufles c'est normal, il fait froid :-)

un exemple :
données avant formatage (type text)
10
   <----
21
12
10

après formatage (type integer)
10
-1 <----
21
12
10

donc le vide prend la valeur de -1 alors qu'il doit rester vide.
je pense faire 2ème  requete où je vais formater comme ça :

CASE imp_germes
WHEN -1 then null
ELSE imp_germes
END

Hors ligne

#6 27/02/2013 17:14:20

Marc Cousin
Membre

Re : formatage de champ

CASE imp_germes
	WHEN  null THEN null
        WHEN ' ' THEN null
        WHEN '' THEN NULL
	ELSE imp_germes::integer
END

Il n'y a pas de «vide» comme pour les chaînes de caractères. Un numérique contient soit un nombre, soit null. Il faut donc décider quoi faire avec la chaine vide… j'avais mis -1 comme exemple. On peut mettre NULL (ce que j'ai fait dans ce nouvel exemple)


Marc.

Hors ligne

#7 27/02/2013 17:20:19

damalaan
Membre

Re : formatage de champ

je viens de faire ça

CASE imp_germes
	WHEN '' THEN null
	ELSE imp_germes
	END::integer as imp_germes

et ça marche
donc WHEN null THEN null génère une erreur
et WHEN '' THEN null fonctionne !?

merci de votre aide

Hors ligne

#8 27/02/2013 17:21:16

Marc Cousin
Membre

Re : formatage de champ

Ben ça veut dire que votre champ texte contient une chaîne vide, et pas un null. Ce qui est différent.


Marc.

Hors ligne

Pied de page des forums