代码之家  ›  专栏  ›  技术社区  ›  EmmyS

如何使用mysql replace()替换多个记录中的字符串?

  •  157
  • EmmyS  · 技术社区  · 14 年前

    我们有一个数据库,在一列中有一堆记录,其中有一些坏数据,其中一个嵌入的编辑器转义了一些不应该转义的内容,并且破坏了生成的链接。

    我想运行一个查询来替换所有记录中的坏字符,但无法确定如何执行。我找到了 the replace() function 在MySQL中,如何在查询中使用它?

    例如,如果我想替换字符串,正确的语法是什么? &lt; 实际小于尖括号( < )在所有记录中 &书信电报; articleItem 列?它可以在一个查询中完成(即在一个Swoop中选择并替换所有查询),还是必须执行多个查询?即使是多个查询,我如何使用 替换() 要对多个记录上的字段值执行替换操作吗?

    4 回复  |  直到 7 年前
        1
  •  374
  •   Raj More    7 年前

    在非常一般的层面上

    UPDATE MyTable
    
    SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')
    
    WHERE SomeOtherColumn LIKE '%PATTERN%'
    

    在你的例子中,你说这些是逃走的,但是由于你没有具体说明他们是如何逃走的,我们假设他们是逃到 GREATERTHAN

    UPDATE MyTable
    
    SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')
    
    WHERE articleItem LIKE '%GREATERTHAN%'
    

    由于您的查询实际上将在字符串内工作,因此 WHERE 执行模式匹配的子句不太可能提高任何性能—它实际上将为服务器生成更多的工作。除非您有另一个WHERE子句成员可以使此查询更好地执行,否则只需执行如下更新:

    UPDATE MyTable
    SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')
    

    也可以嵌套多个 REPLACE 电话

    UPDATE MyTable
    SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')
    

    选择数据时也可以这样做(与保存数据时相反)。

    所以不是:

    SELECT MyURLString From MyTable

    你可以的

    SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable

        2
  •  22
  •   simshaun    14 年前
    UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')
        3
  •  5
  •   Mahendra Jella    11 年前

    检查这个

    UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')
    

    示例字符串:

    UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')
    

    例如,列/字段名:

    UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')
    
        4
  •  4
  •   Gianluca D'Ardia    9 年前

    您可以这样编写存储过程:

    创建过程清理_ ()

    开始

    #用下划线替换空格

    更新 集合 字段名 =更换( 字段名 其中 字段名 不为空;

    #删除点

    更新 集合 字段名 =更换( 字段名 ,“.”,“)其中 字段名 不为空;

    #删除(

    更新 集合 字段名 =更换( 字段名 ,“(”,“)其中 字段名 不为空;

    #删除)

    更新 集合 字段名 =更换( 字段名 ,“)”,“”)其中 字段名 不为空;

    #拉普拉斯或删除任何你想要的字符

    #…………………

    结束

    通过这种方式,您可以模块化地控制表。

    您还可以将存储过程归纳为使其与表参数化,以使输入参数不起作用。