mysql - 替换 MySQL 中的所有字段

标签 mysql sql replace sql-update

我需要使用 REPLACE 命令替换表格列中的一些字符。
我知道 REPLACE 命令需要一个列名,然后是要更改的文本(在以下示例中为“a”字符)和新文本(在以下示例中为“e”字符)。

UPDATE my_table SET my_column = REPLACE (my_column,'a','e' );

因此,执行此命令会将 my_table 表的 my_column 列中出现的所有 'a' 更改为 'e' 字符。

但是,如果我需要对每一列而不只是一个列执行 REPLACE 命令怎么办?这可能吗?

谢谢

最佳答案

使用以下 SQL 查询生成您需要替换所有列中的值的 SQL 查询。

select concat(
       'UPDATE my_table SET ',
       column_name,
       ' = REPLACE(', column_name, ', ''a'', ''e'');')
from information_schema.columns
where table_name = 'my_table';

执行此 SQL 查询后,只需运行所有查询以替换所有值。


谷歌搜索后未经测试

用这样的核心创建一个存储过程。它可以接受表的名称、要查找的值和要替换的值。

主要思想是使用:

  1. 为动态 SQL 执行准备的语句;
  2. 用于遍历表的所有列的游标。

请参阅下面的部分代码(未经测试)。

DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR
    SELECT column_name FROM information_schema.columns
    WHERE table_name = 'my_table';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur1;
REPEAT
    SET s = concat(
       'UPDATE my_table SET ',
       column_name,
       ' = REPLACE(', column_name, ', ''a'', ''e'');');
    PREPARE stmt2 FROM s;
    EXECUTE stmt2;
    FETCH cur1 INTO a;
UNTIL done END REPEAT;
CLOSE cur1;

关于mysql - 替换 MySQL 中的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145076/

相关文章:

php - 删除带有索引的大型 MySQL 表的性能

regex - 搜索并替换为正则表达式 webuilder

linux - Linux 中一组文件中的 SED 替换

php - 从另一个表中获取记录

sql - 优化长时间运行的 SQL Server 查询

php - SQL 加入收藏夹列表返回错误的名称

sql - Oracle SQL 顺序组号赋值

oracle - 用 VARCHAR2 替换 CHAR

mysql - 存储函数中动态 sql 的替代方法

mysql - Mysql 中的自动索引