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

Langage SQL Discussion :

Ajout d'une colonne à partir d'une autre avec changement du type.


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Ajout d'une colonne à partir d'une autre avec changement du type.
    Bonjour,
    Je souhaiterais SVP au sein d'une requête de sélection, créer une colonne supplémentaire à ma table qui serait la copie d'une colonne existante mais avec un type différent.


    table_exemple

    champ1 (integer), champ2 (text)

    SELECT champ1, champ3
    FROM table_exemple

    avec mon champ3 qui serait la copie de mon champ2 mais au format integer

    Cordialement,
    Aurélien

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Quel est le SGBD utilisé ?
    Qu'est-ce que tu entends pas "au format integer" ?

    Est-ce que la colonne3* peut contenir autre chose qu'une donnée représentable sous forme d'entier, une chaine quelconque ?

    Tatayo.

    *: une table est constituée de colonne, pas de champ.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Le SGBD est Postgresql.
    Le format integer: format de type entier.

    En fait, je voudrais copier le contenu d'une colonne de type texte (contenant des années) dans une colonne de type entier

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Tu ne donnes pas beaucoup d'éléments.

    Ceci permet d'effectuer une conversion de type explicitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ALL col1, col2, CAST(col2 AS INTEGER) AS col3
    FROM ta_table;
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Tu ne donnes pas beaucoup d'éléments.

    Ceci permet d'effectuer une conversion de type explicitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ALL col1, col2, CAST(col2 AS INTEGER) AS col3
    FROM ta_table;
    Parfait, merci bcp !
    et derniere question, si je veux ajouter en + une colonne vide "col4" de type integer, comment je l’écris ?

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il est inutile et risqué de recopier le contenu dans une colonne : en cas de modification, ça oblige à propager dans la deuxième colonne.
    Comme toute redondance, c'est à ne pas faire.
    Il est préférable de calculer la valeur quand nécessaire, par exemple au moyen d'une vue.

    Par ailleurs, dans une table d'un SGBD relationnel, il n'y a pas de champs, il y a des colonnes.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    je veux seulement réaliser un export (one shot), pas question de mises à jour pour cette opération

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    J'ai du mal à voir ce que peut contenir une colonne vide de type entier.
    Une chaine vide, je vois, mais un entier vide non.

    Peux-tu nous montrer à quoi doit ressembler le résultat ?

    Tatayo.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    ça serait une colonne contenant les années:

    Année
    2022
    2021
    2022
    2014

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Avec PostgreSQL vous avez les colonnes générées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create table Aurel3533_tbl
    ( col1      date
    , col2      varchar(10)
    , col3      integer generated always as (extract(year from col1)) stored
    );
     
    insert into Aurel3533_tbl (col1, col2) values (current_date, 'Toto');
     
    select * from Aurel3533_tbl;
     
    col1        col2  col3
    ----------  ----  ----
    2023-01-26  Toto  2023
    db<>fiddle

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/04/2021, 15h25
  2. Réponses: 2
    Dernier message: 29/08/2013, 16h44
  3. Réponses: 2
    Dernier message: 25/03/2009, 09h45
  4. matrice à partir d'une autre avec un test
    Par lilyla dans le forum MATLAB
    Réponses: 6
    Dernier message: 23/01/2008, 15h39
  5. valeur d'un champ de formulaire ajouté depuis une autre page
    Par manaboko dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 09h29

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