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",第二部分替换它的所有进一步出现。
我想更新一个列的所有字段,其中很多字段都有一个所需的字符串,但我希望这个字符串只在每个字段中出现一次,例如: "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",第二部分替换它的所有进一步出现。