sql >> Database >  >> RDS >> Mysql

SQL:zoeken/vervangen maar alleen de eerste keer dat een waarde in record verschijnt

Dit zou eigenlijk moeten zijn wat je wilt 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));

Het is iets gecompliceerder dan mijn eerdere antwoord - Je moet de eerste instantie van de 'A' vinden (met behulp van de INSTR-functie), dan LEFT gebruiken in combinatie met REPLACE om alleen die instantie te vervangen, dan SUBSTRING en INSTR gebruiken om diezelfde te vinden 'A' die u vervangt en CONCAT deze met de vorige tekenreeks.

Zie mijn test hieronder:

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;

Produceert:

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


  1. base64-afbeeldingen ophalen uit database

  2. MYSQL-syntaxis evalueert niet niet gelijk aan in aanwezigheid van NULL

  3. Verbinding maken met een PostgreSQL-database op een Docker-container

  4. Waarom kan easy_install MySQLdb niet vinden?