IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Importation des nombres décimaux à virgule via COPY


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 359
    Points : 136
    Points
    136
    Par défaut Importation des nombres décimaux à virgule via COPY
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    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 .

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il me semble qu'il n'y a aucun moyen du point de vue de COPY. Il faut pré-traiter le fichier par un filtre qui remplaçe ces virgules par des points.

    D'une manière générale en SQL, la virgule sert tellement à autre chose qu'il est ingérable de l'avoir aussi en tant que séparateur décimal.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si tu ne peux pas modifier facilement le fichier CSV source, tu peux, en SQL :
    - importer le fichier dans une table temporaire ;
    - remplacer dans la colonne de nombres la vigule par le point ;
    - exporter vers la bonne table les données en castant la colonne de nombres en vrai nombre décimal.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 359
    Points : 136
    Points
    136
    Par défaut
    Merci beaucoup,

    J'ai finalement préféré remplacer les virgules par des points du fichier CSV .

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut REMPLACE() pour l'ensemble de la table
    Bonjour,

    Dans mon cas je préfère utiliser une table temporaire et utiliser la fonction REMPLACE pour changer les , en .

    Mon problème est que je ne sais pas comment le faire pour la table en entier (environs 30 colonnes). J'ai donc fait un remplace pour chaque colonne mais cette solution est lourde et tout sauf optimisée.

    Auriez-vous une astuce pour éviter d’écrire pour chaque colonne de ma table un replace ?

    Cordialement,

    Aurélie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de variable contenant des nombres a virgule en SQL
    Par Rukawa dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 27/10/2006, 18h54
  2. Somme sur des nombre décimaux
    Par chrislauxerrois dans le forum Access
    Réponses: 1
    Dernier message: 01/08/2006, 16h46
  3. [PHP,MYSQL et CSV]Importation avec nombres décimaux
    Par m3n2o dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 20/06/2006, 11h47
  4. Select sur des nombre décimaux de format 0.*
    Par CanardJM dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/08/2005, 16h04
  5. sum avec des nombres avec virgule
    Par Bruno2000 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/09/2004, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo