MySQL cerca e sostituisce del testo in un campo


257

Quale query MySQL eseguirà una ricerca di testo e sostituirà in un campo particolare in una tabella?

Vale a dire cercare fooe sostituire barcosì hello foodiventa un record con un campo con il valore hello bar.

Risposte:


490

Modifica table_namee fieldabbina il nome della tabella e il campo in questione:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;

79
UPDATE [table_name] SET [field_name] = REPLACE ( [field_name], "foo", "bar");
Meetai.com,

6
Penso che sia più veloce da non usare WHERE instr(field, 'foo') > 0;(quindi non eseguirà 2 ricerche) ... Sbaglio?
Inemanja,

2
@treddell, nessuna posizione inizia da 1 nelle stringhe SQL.
Alexis Wilke,

2
@inemanja, @Air senza la WHEREclausola che fai UPDATEsu tutte le righe ...
Alexis Wilke,

7
Come Pring, se hai intenzione di lasciare un commento del genere, potresti voler spiegare il perché. È stato un errore nel consiglio originale o un errore da parte tua? E sai che prima di apportare modifiche radicali a un database devi prima eseguire il backup?
pdwalker,

86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');

2
Mi ha aiutato. Per tutti i rumori, rimuovere le parentesi quadre.
Anantha Raju C

8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Come ad esempio, se voglio sostituire tutte le occorrenze di John con Mark che userò di seguito,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');

6

E se si desidera cercare e sostituire in base al valore di un altro campo, è possibile eseguire un CONCAT:

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

Solo per avere questo qui in modo che gli altri lo trovino subito.



4

Nella mia esperienza, il metodo più veloce è

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

La INSTR()strada è la seconda più veloce e omettere del WHEREtutto la clausola è più lenta, anche se la colonna non è indicizzata.


Funziona per me perché ho bisogno di aggiungere un'altra clausola dove. UPDATE table_name SET field = REPLACE (field, 'foo', 'bar') DOVE il campo COME '% foo%' AND otherfield = 'foo22'
Max

1

La funzione Sostituisci stringa lo farà.


Per me va bene. Dipende da come interpreti la domanda. Se è necessario modificare le voci del database, utilizzare update. Altrimenti questa soluzione è molto migliore in quanto può essere utilizzata senza aggiornare i campi.
Gruber,

0

Ho usato la riga di comando sopra come segue: aggiorna TABLE-NAME set FIELD = sostituisci (FIELD, 'And', 'and'); lo scopo era sostituire And con e ("A" dovrebbe essere minuscolo). Il problema è che non riesco a trovare "And" nel database, ma se uso come "% And%", allora può trovarlo insieme a molti altri ands che fanno parte di una parola o anche quelli che sono già in minuscolo.

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.