MySQL :替换字段中出现的字符串,第一个除外

MySQL : replace occurence of a string in field except first one

我想更新一个列的所有字段,其中很多字段都有一个所需的字符串,但我希望这个字符串只在每个字段中出现一次,例如: "MyString OtherString MyString AnotherString AndAnother MyString"

"MyString OtherString AnotherString AndAnother"

您知道如何实现这一点吗?

如果 "MyString" 始终作为字段中的第一个词出现,这将有效:

update MyTable set MyField = replace(MyField, ' MyString','')

上面的关键点是我们查找带有前导 space 的 "MyString" 的出现次数,因此将忽略字段开头的第一个出现次数。

但是,我的猜测是这可能太脆弱了 - 如果 "MyString" 的第一次出现不在字段的开头怎么办?

在后一种情况下,您需要以下内容:

UPDATE 
    MyTable 
SET 
    MyField = 
    CONCAT(
        LEFT(MyField,INSTR(MyField,'MyString') + LENGTH('MyString')), 
        REPLACE(RIGHT(MyField, LENGTH(MyField) - (INSTR(MyField,'MyString') + LENGTH('MyString'))), 'MyString','') 
    )

这样做是将字段分成两部分,第一部分直到并包括第一次出现的 "MyString",第二部分替换它的所有进一步出现。