Vous n'êtes pas identifié(e).
Bonjour à tous,
J'ai une procédure stockée permettant d'importer un fichier CSV vers une table, via la commande COPY .
Seulement voilà le fichier CSV à importer peut contenir des nombres décimaux à virgule . Si c'est le cas, celà me génère une erreur de la façon suivante :
invalid input syntax for type real: "66,11"
CONTEXT: COPY ma_table, line 2, column ma_colonne: "66,11"
Je souhaite savoir est ce qu'il y a un moyen de contourner ce problème de convertion de façon à remplacer les virgules par des points pour les nombres décimaux ?
J'utilise Postgres 8.4 .
En vous remerciant d'avance .
Cordialement .
Hors ligne
Tu utilise un délimiteur quand tu fais un copy ma_table to ...? si ce n'est pas le cas rajoute WITH DELIMITER ";"
Hors ligne
Bonjour,
Il n'y a pas de solution simple. Vous pouvez passer par une table temporaire et ensuite remplacer les , par des . et insérer dans la table finale.
Sinon, si vous avez la main sur la génération des csv vous pouvez corriger ce problème à la source.
Julien.
https://rjuju.github.io/
Hors ligne
Autant pour moi j'ai mal lu ><. Et avec un overlay(',' placing '.') ou quelque chose dans ce genre ?
Il me semble que dans mes cours sql il y a une autre fonction.
Dernière modification par karthus (15/05/2012 10:45:41)
Hors ligne
Il existe la fonction replace() qui pourrait aider à corriger le problème, mais ce n'est pas utilisable lors d'un copy, à moins de faire un trigger sur le(s) champs. Mais c'est un peu une solution extrême.
Dernière modification par rjuju (15/05/2012 10:49:04)
Julien.
https://rjuju.github.io/
Hors ligne
Oui, autant écrire une regexp qui convertit le fichier avant de l'importer. Mais ça devient un autre sport, même si c'est probablement le plus simple et le plus rapide.
Marc.
Hors ligne