Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Pages : 1