Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
#1 Fri 27 January 2023 11:59
- Sig_Passy
- Participant occasionnel
- Date d'inscription: 17 Mar 2022
- Messages: 38
Plusieurs REPLACE dans la même table, colonne
Bonjour,
Je souhaite lancer sur une table pour la même colonne une requête REPLACE pour modifier plusieurs valeurs dans cette colonne. Le tout dans une base postgressql/postgis.
Je m'explique : J'ai MA.TABLE qui contient une COLONNE qui contient des valeurs "non intelligibles" type 00,01,02,03
J'ai en parallèle un petit tableau qui m'indique que 00 = Valeur_1 (Valeur_1 étant une données intelligibles) et cela pour toutes mes valeurs.
Je voudrais via une seule requête faire la bascule de 00 vers Valeur_1,de 01 vers Valeurs_2, etc.
J'ai écris cette requête :
Code:
UPDATE MA.TABLE SET COLONNE = REPLACE(COLONNE, '00', 'Valeur_1'), COLONNE = REPLACE(COLONNE, '01', 'Valeur_2'), COLONNE = REPLACE(COLONNE, '02', 'Valeur_3'), COLONNE = REPLACE(COLONNE, '03', 'Valeur_4')
Mais ça ne marche pas. Et je n'arrive pas à trouver de solution.
Est ce que l'un d'entre vous pourrait m'aider ?
Merci par avance. ;-)
Dernière modification par Sig_Passy (Fri 27 January 2023 13:00)
Hors ligne
#2 Fri 27 January 2023 13:05
Re: Plusieurs REPLACE dans la même table, colonne
Bonjour,
Vous ne pouvez pas modifier plusieurs fois la même colonne dans une même requête, vous devez exécuter plusieurs requêtes (4 dans votre exemple) :
Code:
UPDATE MA.TABLE SET COLONNE = REPLACE(COLONNE, '01', 'Valeur_1'); UPDATE MA.TABLE SET COLONNE = REPLACE(COLONNE, '02', 'Valeur_2'); UPDATE MA.TABLE SET COLONNE = REPLACE(COLONNE, '03', 'Valeur_3'); UPDATE MA.TABLE SET COLONNE = REPLACE(COLONNE, '04', 'Valeur_4');
Jean-Marie
Azimut
Hors ligne
#3 Fri 27 January 2023 13:15
- Sig_Passy
- Participant occasionnel
- Date d'inscription: 17 Mar 2022
- Messages: 38
Re: Plusieurs REPLACE dans la même table, colonne
OK, Merci pour votre réponse.
Bon Week-End.
Hors ligne
#4 Fri 27 January 2023 14:29
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 997
Re: Plusieurs REPLACE dans la même table, colonne
Sinon, c'est possible aussi en une requête en imbriquant les replace().
Code:
UPDATE MA.TABLE SET COLONNE = REPLACE(REPLACE(REPLACE(REPLACE(COLONNE, '01', 'Valeur_1'),'02', 'Valeur_2'),'03', 'Valeur_3'),'04', 'Valeur_4');
Sylvain M.
Hors ligne
#5 Fri 27 January 2023 20:43
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 431
Re: Plusieurs REPLACE dans la même table, colonne
Bonjour,
Il y a plus élégant et paramétrable facilement si un jour vous avez plusieurs colonnes à mettre à jour selon une table de correspondance.
Voir ici en anglais : https://stackoverflow.com/a/18799497
Avec un sqlfiddle pour le tester : http://sqlfiddle.com/#!17/198a3/1
L'idée est d'utiliser la forme update ... from.
Code:
update ma.table as t set t.colonne = c.nouvelle_valeur from (values ('00', 'Valeur_1'), ('01', 'Valeur_2'), ('02', 'Valeur_3'), ('03', 'Valeur_4') ) as c(ancienne_valeur, nouvelle_valeur) where c.ancienne_valeur = t.colonne;
Dernière modification par p.jeremie (Fri 27 January 2023 20:44)
Hors ligne
#6 Tue 31 January 2023 15:33
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 997
Re: Plusieurs REPLACE dans la même table, colonne
Il y a plus élégant et paramétrable facilement si un jour vous avez plusieurs colonnes à mettre à jour selon une table de correspondance.
Plus élégant, certes , mais il me semble que cela ne répond pas au besoin : ton code permet de mettre à jour les valeurs d'un champ, selon une table de correspondance, mais pour l'ensemble du champ.
Hors, il s'agissait ici de remplacer, au sein d'un même champ et de mêmes lignes, plusieurs valeurs.
Par exemple "01, 02, 03" devient "Valeur_1, Valeur_2, Valeur_3".
Après, je ne doute pas qu'il y ait plus élégant que les Replace() imbriqués (sans doute à chercher avec les REGEX que je ne maîtrise pas), mais en tout cas, il fonctionnent et répondent au besoin
Sylvain M.
Hors ligne
#7 Tue 31 January 2023 18:08
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 431
Re: Plusieurs REPLACE dans la même table, colonne
Je viens de relire la demande d'origine et je ne vois pas où il est précisé que la colonne contient autre chose que les valeurs à remplacer.
Cependant il suffit d'adapter la requête pour faire un replace à la place de récupérer la valeur de correspondance et on arrive au même résultat que les replace imbriqués.
Un regexp_replace aurait un peu le même problème que les replace imbriqués : la lisibilité qui serait moins facile qu'avec la table de correspondance.
La requête précédente modifiée pour faire un replace :
Code:
update ma.table as t set t.colonne = replace(t.colonne,c.ancienne_valeur,c.nouvelle_valeur) from (values ('00', 'Valeur_1'), ('01', 'Valeur_2'), ('02', 'Valeur_3'), ('03', 'Valeur_4') ) as c(ancienne_valeur, nouvelle_valeur) where t.colonne like concat('%',c.ancienne_valeur,'%');
Hors ligne
#8 Wed 01 February 2023 16:16
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 997
Re: Plusieurs REPLACE dans la même table, colonne
Bonjour Jérémie,
En effet, j'ai sans doute extrapolé la demande.
Mais super : tu as donc réussi à répondre aux 2 problématiques : bravo et merci
(pas testée, mais je pense en avoir l'utilité un de ces jours : j'essaierai de retrouver ce post !)
Sylvain M.
Hors ligne