#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: 1044
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: 455
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: 1044
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: 455
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: 1044
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

