Mysql
 sql >> Database >  >> RDS >> Mysql

Trova e sostituisci una parte di testo in un campo usando MySQL

Per sostituire una stringa non fissa è necessario utilizzare i delimitatori della stringa che si desidera sostituire. Nell'esempio seguente i delimitatori sono START e END , quindi dovresti sostituirli con quelli che stai cercando. Ho incluso entrambe le opzioni:con e senza i delimitatori sostituiti.

Dati di esempio assumendo una tabella t con una colonna col :

| COL | WITH_DELIMITERS_REPLACED | WITHOUT_DELIMITERS_REPLACED ||--------------------|-------------------------- |---------------||| abSTARTxxxxxxxxxEND | ab | abSTARTEND || abcSTARTxxxxxENDd | abc | abcSTARTENDd || abcdSTARTxxENDef | abcdef | abcdSTARTENDef || abcdeSTARTxENDfgh | abcdefgh | abcdeSTARTENDfgh || abcdefSTARTENDghij | abcdefghij | abcdefSTARTENDghij | 

Questa è la query che crea l'output precedente da col colonna. Ovviamente, usa solo la parte della query di cui hai bisogno (con o senza delimitatori sostituiti).

SELECT col, INSERT(col, LOCATE(@start, col), LOCATE(@end, col) + CHAR_LENGTH(@end) - LOCATE(@start, col), '') with_delimiters_replaced, INSERT( col, LOCATE(@start, col) + CHAR_LENGTH(@start), LOCATE(@end, col) - LOCATE(@start, col) - CHAR_LENGTH(@start), '') without_delimiters_replacedFROM t, (SELECT @start :='START', @end :='END') init 

Funzionerà a condizione che sia START e END le stringhe sono presenti nel testo di input.

Per aggiornare effettivamente i dati, usa UPDATE command (usando la versione della query effettivamente necessaria, in questo caso quella con i delimitatori sostituiti):

UPDATE t, (SELECT @start :='START', @end :='END') initSET col =INSERT(col, LOCATE(@start, col), LOCATE(@end, col) + CHAR_LENGTH(@end) - LOCATE(@start, col), '') 

Nel tuo caso particolare sostituisci START con: