Come posso usare mySQL replace () per sostituire le stringhe in più record?


166

Abbiamo un database che ha un sacco di record con alcuni dati errati in una colonna, in cui un editor incorporato è sfuggito ad alcune cose che non avrebbero dovuto essere sfuggite e sta rompendo i collegamenti generati.

Voglio eseguire una query per sostituire i caratteri non validi in tutti i record, ma non riesco a capire come farlo. Ho trovato la replace()funzione in MySQL, ma come posso usarla all'interno di una query?

Ad esempio, quale sarebbe la sintassi corretta se volessi sostituire la stringa &lt;con una parentesi angolare inferiore a (effettiva <) in tutti i record che hanno &lt;nella articleItemcolonna? Può essere fatto in una singola query (cioè selezionare e sostituire tutto in un colpo solo) o devo fare più query? Anche se si tratta di più query, come posso fare replace()per sostituire il valore di un campo su più di un record?


5
prima di fare qualsiasi cosa assicurati di eseguire il backup anche del database. Utilizzerai anche update per aggiornare qualsiasi campo.
Matt,


Risposte:


395

A un livello molto generico

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

Nel tuo caso dici che sono stati salvati, ma dal momento che non specifichi come sono stati salvati, diciamo che sono stati evasi GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

WHERE articleItem LIKE '%GREATERTHAN%'

Poiché la query funzionerà effettivamente all'interno della stringa, WHEREè improbabile che la clausola che esegue la corrispondenza del modello migliori qualsiasi prestazione, in realtà genererà più lavoro per il server. A meno che tu non abbia un altro membro della clausola WHERE che renderà migliore questa query, puoi semplicemente fare un aggiornamento come questo:

UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

Puoi anche nidificare più REPLACEchiamate

UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')

Puoi anche farlo quando selezioni i dati (al contrario di quando li salvi).

Quindi invece di:

SELECT MyURLString From MyTable

Si potrebbe fare

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable


7
cavillo minore: GREATERTHAN è '>'
Olivier Dulac

23
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')

Risolto il &lt;problema Devi usare la codifica di &, in questo modo: &amp;:)
Dan J,

L'ho modificato di nuovo. Grazie per avermi fatto sapere. Mi è venuto in mente qualche istante dopo che ho detto che non sapevo come. Questo è il modo in cui funziona il mio mondo. :)
simshaun,

6

Controllare questo

UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')

Ad esempio con stringa di esempio:

UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')

EG con nome colonna / campo:

UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')

4

puoi scrivere una procedura memorizzata come questa:

CREATE PROCEDURE sanitize_ TABLE ()

INIZIO

#sostituisci spazio con trattino basso

UPDATE Table SET FieldName = REPLACE ( FieldName , "", "_") DOVE FieldName non è NULL;

#delete dot

UPDATE Table SET FieldName = REPLACE ( FieldName , ".", "") DOVE FieldName non è NULL;

#Elimina (

UPDATE Table SET FieldName = REPLACE ( FieldName , "(", "") DOVE FieldName non è NULL;

#Elimina )

UPDATE Table SET FieldName = REPLACE ( FieldName , ")", "") DOVE FieldName non è NULL;

#sostituisci o elimina tutti i caratteri desiderati

# ..........................

FINE

In questo modo hai un controllo modulare sulla tabella.

È inoltre possibile generalizzare la stored procedure rendendola, parametrica con tabella per sanificare il parametro di input


1
quei controlli null sono ridondanti
kiedysktos,

Esistono strumenti facili e sicuri per creare procedure memorizzate mysql?
Ivan Slaughter,

0

Questo ti aiuterà.

UPDATE play_school_data SET title= REPLACE(title, "&#39;", "'") WHERE title = "Elmer&#39;s Parade";

Risultato:

title = Elmer's Parade
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.