postgresql - sostituisce tutte le istanze di una stringa nel campo di testo


Risposte:


404

Vuoi usare la funzione di sostituzione di postgresql :

replace(string text, from text, to text)

per esempio :

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

Tuttavia, tieni presente che si tratterà di una sostituzione da stringa a stringa, quindi "categoria" diventerà "dogegoria". la funzione regexp_replace può aiutarti a definire un modello di corrispondenza più rigoroso per ciò che desideri sostituire.


4
Ciao ragazzi, mi piace la vostra risposta e spiegazione, è davvero utile. Potresti aggiungere un esempio utilizzando regexp_replace? Grazie!
Wim Feijen,

1
per una migliore granularità, puoi usareregexp_replace
drs

83

Il modo di espressione regolare

Se è necessaria una corrispondenza di sostituzione più rigorosa, la regexp_replacefunzione di PostgreSQL può corrispondere utilizzando i modelli di espressioni regolari POSIX. Ha la sintassi regexp_replace (sorgente, modello, sostituzione [, flag]) .

Userò le bandiere ie gper la corrispondenza senza distinzione maiuscole e minuscole, rispettivamente. Userò anche \me \Mper abbinare l'inizio e la fine di una parola, rispettivamente.

Di solito ci sono parecchi gotcha quando si esegue la sostituzione di regex. Vediamo com'è facile sostituire un gatto con un cane .

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

Anche dopo tutto ciò, esiste almeno una condizione irrisolta. Ad esempio, le frasi che iniziano con "Gatto" verranno sostituite da "cane" minuscolo che spezza la maiuscola della frase.

Controlla gli attuali documenti PostgreSQL corrispondenti per tutti i dettagli.

Aggiorna l'intera colonna con il testo di sostituzione

Dati i miei esempi, forse l'opzione più sicura sarebbe:

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

30

Puoi usare la replacefunzione

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

La definizione della funzione è la seguente (ottenuta da qui ):

replace(string text, from text, to text)

e restituisce il testo modificato. Puoi anche dare un'occhiata a questo violino sql .


0

Ecco un esempio che sostituisce tutte le istanze di 1 o più caratteri di spazio bianco in una colonna con un trattino basso usando l'espressione regolare -

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

Penso che sia necessaria solo una barra rovesciata prima della "s"
Marty Neal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.