Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 25 July 2018 17:42

alexandra21
Juste Inscrit !
Date d'inscription: 25 Jul 2018
Messages: 7

Utiliser Insert into...

Bonjour à vous,

INSERT INTO schema.table_new (col1, col2, col3) SELECT col1, col3, col4 FROM schema_temp.table_old ;

Lors de l'insertion des lignes issues de la table_old vers la table_new, je me trouve confontrée au problème que le type de données de la col3 de la table_old n'est pas le même que celui déclaré pour la col2 de la table_new. En effet, je souhaiterais que les valeurs prises par la col3 de la table_old soit modifiées en acronymes lors de leur insertion dans la col2 de la table_new.

A votre écoute si quelqu'un a une solution,
Je vous remercie par avance pour votre aide,

Hors ligne

 

#2 Wed 25 July 2018 18:00

Ben22
Participant actif
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 96

Re: Utiliser Insert into...

Sous réserve d'avoir bien compris :

Si vous souhaitez extraire par exemple les 3 premiers caractères de chaque valeurs en guise d'acronyme :

Code:

INSERT INTO schema.table_new (col1, col2, col3) SELECT col1, substring(col3 from 0 for 3), col4 FROM schema_temp.table_old ;

Si vous voulez gerer vos acronymes en fonction de chaque valeur :

Code:

INSERT INTO schema.table_new (col1, col2, col3) 
SELECT col1
      , CASE WHEN col3 = 'aaaaaa ' THEN 'AAA'
        WHEN col3 = 'bbbbbbb ' THEN 'BBB'
       WHEN col3 = 'ccccccccc ' THEN 'CCC'
        ELSE 'ZZZ' END
   ,col4
 FROM schema_temp.table_old ;

En attendant une meilleurs solution ... smile

Hors ligne

 

#3 Wed 25 July 2018 18:03

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Utiliser Insert into...

Bonjour,

Dans le select, vous pouvez utiliser les fonctions SQL de votre choix: si vous avez des opérations a faire sur col3, ecrivez-les dans la partie select.
Qu'entendez-vous par "modifiées en acronymes" ? prendre juste la premiere lettre de chaque mot ?

Surtout, quels sont les types de données des colonnes de la table_new et table_old ?

Par ex, pour prendre la premiere lettre de chaque mot:

Code:

with table_old as (
  select * from (values 

    (1, 'electricite de france'),
    (2, 'Paris Saint Germain'),
    (3, 'france telecom'),
    (4, 'mort de rire')) as t(id, col3)

), first_letter as (
  select id, upper(left(unnest(regexp_split_to_array(col3, ' ')), 1)) as letter
  from table_old
) select id, string_agg(letter, '') as acronyme
from first_letter
group by id
order by id;

id    acronyme
1    EDF
2    PSG
3    FT
4    MDR

(il doit y avoir plus simple avec des regexp.)

Nicolas

En ligne

 

#4 Wed 25 July 2018 18:21

alexandra21
Juste Inscrit !
Date d'inscription: 25 Jul 2018
Messages: 7

Re: Utiliser Insert into...

Je vais opter pour le code de Ben22 pour le moment wink
Pour répondre à Nicolas, c'est bien prendre la 1ère lettre de chaque mot et les types de données sont : varchar(50) pour table_old et varchar(3) pour table_new.

Merci à tous les deux,

Hors ligne

 

#5 Wed 25 July 2018 18:39

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Utiliser Insert into...

Si vous avez bcp de données dans la table, vous allez vous amuser pour écrire le select ! une ligne à écrire par ligne de la table.
Si vous rajoutez des données dans la table_old, vous devrez réécrire la requete à chaque fois.

Nicolas

En ligne

 

#6 Fri 27 July 2018 11:26

alexandra21
Juste Inscrit !
Date d'inscription: 25 Jul 2018
Messages: 7

Re: Utiliser Insert into...

Je n'ai que 5 catégories d'acronyme pour ce champ et il est peu probable que cela évolue donc dans un premier temps le code me convient bien.
Il est vrai que votre code sera plus pertinent si j'ai un champ avec plus de données à modifier....ce qui sera forcement le cas !!

Hors ligne

 

Pied de page des forums

Powered by FluxBB