Domanda

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

vale a dire. cerca foo e sostituiscilo con bar , quindi un record con un campo con il valore hello foo diventa hello bar .

È stato utile?

Soluzione

Modifica table_name e field in modo che corrispondano al nome della tabella e al campo in questione:

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

Altri suggerimenti

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

E se vuoi cercare e sostituire in base al valore di un altro campo puoi fare 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 altri lo possano trovare subito.

 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 lo userò di seguito,

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

La funzione stringa Sostituisci farlo.

Nella mia esperienza, il metodo più veloce è

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

Il modo INSTR () è il secondo più veloce e omettere la clausola WHERE è del tutto più lento, anche se la colonna non è indicizzata.

Ho usato la riga di comando sopra come segue: aggiorna TABLE-NAME set FIELD = sostituisci (FIELD, 'And', 'and'); lo scopo era sostituire E con e ("A" deve essere minuscolo). Il problema è che non è possibile trovare " e " 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top