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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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: 95

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: 1534

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

Hors 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: 1534

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

Hors 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