我想更新列的所有字段,其中很多字段都有所需的字符串,但我希望该字符串仅在每个字段中出现一次,例如: “MyString OtherString MyString AnotherString AndAnother MyString”
至
“MyString OtherString AnotherString AndAnother”
您知道如何实现这一目标吗?
最佳答案
如果“MyString”始终作为字段中的第一个术语出现,则这将起作用:
update MyTable set MyField = replace(MyField, ' MyString','')
上面的关键点是,我们查找带有前导空格的“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”,第二部分替换所有后续出现的部分。
关于MySQL : replace occurence of a string in field except first one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42110836/