MySQL cerca e sostituisce del testo in un campo

Quale query MySQL farà una ricerca testuale e la sostituirà in un campo particolare in una tabella?

Cerca quindi foo e sostituiscilo con la bar quindi un record con un campo con il valore hello foo diventa hello bar .

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

 UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0; 
  • SOSTITUISCI (funzioni stringa)
  • INSTR (funzioni stringa)
 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 gli altri lo trovino subito.

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

Ad esempio, se voglio sostituire tutte le occorrenze di John di Mark, utilizzerò di seguito,

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

La funzione Sostituisci stringa lo farà.

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

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 l’omissione della clausola WHERE è del tutto più lenta, anche se la colonna non è indicizzata.