Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:substitua a ocorrência de uma string no campo, exceto a primeira


Se "MyString" sempre ocorrer como o primeiro termo no campo, isso funcionaria:
update MyTable set MyField = replace(MyField, ' MyString','')

O ponto chave acima é que procuramos as ocorrências de "MyString" com um espaço à esquerda, então a primeira ocorrência no início do campo será ignorada.

No entanto, meu palpite é que isso pode ser muito frágil - e se a primeira ocorrência de "MyString" não estiver no início do campo?

neste último caso, você precisa do seguinte:
UPDATE 
    MyTable 
SET 
    MyField = 
    CONCAT(
        LEFT(MyField,INSTR(MyField,'MyString') + LENGTH('MyString')), 
        REPLACE(RIGHT(MyField, LENGTH(MyField) - (INSTR(MyField,'MyString') + LENGTH('MyString'))), 'MyString','') 
    )

O que isso faz é dividir o campo em dois, a primeira parte até e incluindo a primeira ocorrência de "MyString", e a segunda parte substituindo todas as outras ocorrências dele.