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

标签 mysql replace find-occurrences

我想更新列的所有字段,其中很多字段都有所需的字符串,但我希望该字符串仅在每个字段中出现一次,例如: “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/

相关文章:

c++ 将 vector 中出现 n 次的所有元素作为 vector 返回

c++ - 查找子字符串出现的次数

PHP 我的查询在 phpmyadmin 中有效,但在我的代码中无效

mysql - 有没有办法忽略 INSERT 中不存在的列?

mysql - 更改 MySQL 字符串列中的 h 标签

java - 如何使用索引将字符替换为字符串

java - 使用 Collections 或我的函数计算 ArrayList 中对象的出现次数

php - PDO MSSQL 空查询错误

phpMyAdmin 与 mysql_fetch_array - 为什么我不能让 GROUP BY 工作?

javascript 使用字符串分割替换标记