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 :

Changer le type d'un champ


Sujet :

Requêtes PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur SIG
    Inscrit en
    Janvier 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Changer le type d'un champ
    Bonjour

    Nouvel utilisateur de PostgreS, je rencontre ce matin des problèmes avec une table. Lors de son import, les champs de cette table ont tous été générés en "character varying". Or, au moins l'un de ces champs devrait être de type "double precision"

    J'essaye donc de convertir les données d'un format vers un autre sans succès. J'ai également testé d'ajouter un nouveau champs et de l'alimenter avec les données du premier mais je ne sais comment forcer les données du champs1 à devenir de type "double precision" dans le champs2.

    Je fais dons appel ce matin à cette vaste communauté d'utilisateurs que j'ai le plaisir de rejoindre après l'avoir consulté pendant des mois.
    Merci par avance de votre aide.
    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
    Est-ce qu'un CAST passe sur toutes les données sans erreur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT cast(champ AS double precision) FROM table
    Si oui faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE name
     ALTER COLUMN champ  TYPE double precision
     USING cast(champ AS double precision)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur SIG
    Inscrit en
    Janvier 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci de cette réponse.

    Le CAST passe mais non pas avec "double precision" mais sur "character"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT cast("NBFLUX_C09_ACTOCC15P"AS character) FROM referentiel."BTT_FM_DTR_2009"
    Du coup, j'ai lancé la seconde ligne de commande en adaptant à mon besoin, mais ça ne va pas jusqu'au bout ... Ou est l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE referentiel."BTT_FM_DTR_2009"
     ALTER COLUMN "NBFLUX_C09_ACTOCC15P" TYPE character
     USING cast("NBFLUX_C09_ACTOCC15P"  AS double precision)
    J'obtiens le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ERREUR:  syntaxe en entrée invalide pour le type double precision : « 76,682051 »
     
    ********** Erreur **********
     
    ERREUR: syntaxe en entrée invalide pour le type double precision : « 76,682051 »
    État SQL :22P02
    Merci encore de votre aide, ça devient urgent pour mes collègues...

  4. #4
    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
    C'est à cause de la virgule comme séparateur décimal. il faut un point au lieu d'une virgule.

    La conversion devrait être retentée avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE referentiel."BTT_FM_DTR_2009"
     ALTER COLUMN "NBFLUX_C09_ACTOCC15P" TYPE double precision
     USING cast( replace("NBFLUX_C09_ACTOCC15P", ',', '.')  AS double precision)
    Ce code met la colonne en type double precision, car je ne comprends pas à quoi ça peut avancer de la mettre en type character par rapport au problème à résoudre.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur SIG
    Inscrit en
    Janvier 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    ça fonctionne ainsi
    Un grand merci pour cette solution.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/06/2007, 17h11
  2. changer le type d'un champs d'une table = effacement des données ?
    Par pierre2410 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/05/2007, 11h22
  3. Changer le type d'un champ via vba
    Par mat75019 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/10/2006, 17h42
  4. Changer le type d'un champ
    Par jean-pierre96 dans le forum Access
    Réponses: 1
    Dernier message: 17/05/2006, 16h50
  5. Probleme Alter - Changer le type d'un champ
    Par Yphon dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/09/2005, 13h58

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