postgresql - zamień wszystkie wystąpienia ciągu w polu tekstowym


Odpowiedzi:


404

Chcesz użyć funkcji zamiany postgresql :

replace(string text, from text, to text)

na przykład :

UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')

Pamiętaj jednak, że będzie to zamiana strun na struny, więc „kategoria” stanie się „dogegory”. funkcja regexp_replace może pomóc ci zdefiniować bardziej rygorystyczny wzór dopasowania dla tego, co chcesz zastąpić.


4
Cześć wszystkim, podoba mi się twoja odpowiedź i wyjaśnienie, to jest naprawdę pomocne. Czy możesz dodać przykład za pomocą regexp_replace? Dzięki!
Wim Feijen

1
dla lepszej ziarnistości można użyćregexp_replace
drs

83

Sposób wyrażania regularnego

Jeśli potrzebujesz ściślejszego dopasowania zamiennego, regexp_replacefunkcja PostgreSQL może się zgadzać przy użyciu wzorców wyrażeń regularnych POSIX. Ma składnię regexp_replace (źródło, wzorzec, zamiana [, flagi]) .

Będę używać flag ii odpowiednio gdo rozróżniania wielkości liter i dopasowania globalnego. Użyję również \mi \Mdopasować odpowiednio początek i koniec słowa.

Podczas wymiany wyrażeń regularnych zwykle występuje sporo błędów. Zobaczmy, jak łatwo jest zamienić kota z psem .

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog');
-->                    Cat bobdog cat cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'i');
-->                    dog bobcat cat cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'g');
-->                    Cat bobdog dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'gi');
-->                    dog bobdog dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat', 'dog', 'gi');
-->                    dog bobcat dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat\M', 'dog', 'gi');
-->                    dog bobdog dog cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat\M', 'dog', 'gi');
-->                    dog bobcat dog cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat(s?)\M', 'dog\1', 'gi');
-->                    dog bobcat dog dogs catfish

Nawet po tym wszystkim istnieje co najmniej jeden nierozwiązany warunek. Na przykład zdania zaczynające się od „Kot” zostaną zastąpione małymi literami „pies”, co łamie wielkie litery zdań.

Sprawdź aktualne dokumenty dopasowujące wzorzec PostgreSQL dla wszystkich szczegółów.

Zaktualizuj całą kolumnę o tekst zastępczy

Biorąc pod uwagę moje przykłady, być może najbezpieczniejszą opcją byłoby:

UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');

30

Możesz użyć tej replacefunkcji

UPDATE your_table SET field = REPLACE(your_field, 'cat','dog')

Definicja funkcji jest następująca (pochodzi stąd ):

replace(string text, from text, to text)

i zwraca zmodyfikowany tekst. Możesz również sprawdzić to skrzypce sql .


0

Oto przykład, który zastępuje wszystkie wystąpienia 1 lub więcej białych znaków w kolumnie znakiem podkreślenia przy użyciu wyrażenia regularnego -

select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;

Myślę, że potrzebny jest tylko jeden odwrotny ukośnik przed „s”
Marty Neal
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.