Jak w Postgresql mogę zastąpić wszystkie wystąpienia ciągu w kolumnie bazy danych?
Że chcę zastąpić wszystkie wystąpienia cat
z dog
, na przykład.
Jak najlepiej to zrobić?
Jak w Postgresql mogę zastąpić wszystkie wystąpienia ciągu w kolumnie bazy danych?
Że chcę zastąpić wszystkie wystąpienia cat
z dog
, na przykład.
Jak najlepiej to zrobić?
Odpowiedzi:
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ć.
regexp_replace
Jeśli potrzebujesz ściślejszego dopasowania zamiennego, regexp_replace
funkcja 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 i
i odpowiednio g
do rozróżniania wielkości liter i dopasowania globalnego. Użyję również \m
i \M
dopasować 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.
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');
Możesz użyć tej replace
funkcji
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 .
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;