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

SQL:cerca/sostituisci ma solo la prima volta che un valore compare nel record

Questo dovrebbe effettivamente essere quello che vuoi in MySQL:

UPDATE wp_post
SET post_content = CONCAT(REPLACE(LEFT(post_content, INSTR(post_content, 'A')), 'A', 'B'), SUBSTRING(post_content, INSTR(post_content, 'A') + 1));

È leggermente più complicato della mia risposta precedente:devi trovare la prima istanza di "A" (usando la funzione INSTR), quindi utilizzare LEFT in combinazione con REPLACE per sostituire solo quell'istanza, piuttosto che usare SUBSTRING e INSTR per trovare lo stesso 'A' stai sostituendo e CONCAT con la stringa precedente.

Vedi il mio test qui sotto:

SET @string = 'this is A string with A replace and An Answer';
SELECT @string as actual_string
, CONCAT(REPLACE(LEFT(@string, INSTR(@string, 'A')), 'A', 'B'), SUBSTRING(@string, INSTR(@string, 'A') + 1)) as new_string;

Produce:

actual_string                                  new_string
---------------------------------------------  ---------------------------------------------
this is A string with A replace and An Answer  this is B string with A replace and An Answer