小编典典

SQL:搜索/替换,但仅在记录中首次出现值时

sql

我在post_content列中有html内容。

我想搜索A并将其替换为B,但只有A第一次出现在记录中,因为它可能出现多次。

以下查询显然会将A的所有实例替换为B

UPDATE wp_posts SET post_content = REPLACE (post_content, 'A', 'B');


阅读 203

收藏
2021-05-05

共1个答案

小编典典

这实际上应该是您在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));

它比我之前的答案稍微复杂-
您需要找到’A’的第一个实例(使用INSTR函数),然后结合使用LEFT和REPLACE来替换该实例,而不是使用SUBSTRING和INSTR来找到相同的实例您要替换的’A’并使用上一个字符串对其进行CONCAT。

请参阅下面的测试:

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;

产生:

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