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: