【问题标题】:MySQL table: How can I remove specific characters from all fields?MySQL 表:如何从所有字段中删除特定字符?
【发布时间】:2011-08-10 18:30:10
【问题描述】:

每周,我都要完全替换几个非常大的 MySQL 表中的数据。所以我通常做的是删除现有数据,导入新数据,然后根据需要运行我常用的查询来修改新数据。

不幸的是,这些天我注意到新数据包含不需要的字符,例如引号和多余的空格。在其中一些表 (AFAIK) 中有超过 100,000 条记录,我无法在导入之前轻松地在记事本中打开数据以去除不需要的字符。

我意识到我可以为每个表中的每一列单独编写一个查找和替换查询,如下所示:

UPDATE mytablename SET mycolumn = REPLACE(mycolumn, '"', '');

但是必须为每一列命名是一件麻烦事。无论如何,我想找到一个更优雅的解决方案。今天在网上找到了一个sn-p,看起来像个start:

 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE
        table_name = 'myTable' and ordinal_position = 1 

我认为下一步可能是遍历序数位置,然后替换和更新每一列,但我不知道如何在 MySQL 中执行此操作。我也不知道如何在到达最后一列后停止循环,以避免出现错误消息。

有没有简单的方法来做到这一点?还是我希望太多?

我是初学者,因此非常感谢您提供清晰,简单的解释。

提前致谢。

更多信息:

  1. 自从我第一次发帖以来,我发现我的服务器上不允许存储过程。太糟糕了。
  2. 无论如何,我已经尝试过这个新代码,只是为了开始:

设置@mytablestring='mytable';

设置@mycolumnnumber=1;

set @mycolumnname=(SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @mytablestring and ordinal_position = @mycolumnnumber);

从我的表中选择@mycolumnname;

不幸的是,在最终的 SELECT 查询中,@mycolumnname 被解释为字符串,而不是列名。所以查询不起作用。如果我能克服这个问题,我相信我可以编写一些代码来循环通过增加@mycolumnnumber 来遍历列。

如果有人知道如何解决这个问题,我将非常感谢一些帮助。

非常感谢。

【问题讨论】:

  • 你有什么理由不只是组装一个脚本或编写一个清理数据的 SQL 语句过程?
  • 是的,有一个很好的理由:我不知道怎么做。当然,我可以编写 100 个或更多单独的查询来更新各个列,但我希望有一个更好的解决方案,单个查询可以搜索整个表。在各种论坛上有很多帖子问这个问题,但我从来没有看到它用简单的术语回答,没有求助于文本编辑器,也不必为每一列编写单独的查询。所以我很想知道 MySQL 是否具有足够的通用性和强大的功能来处理这种事情。谢谢。

标签: mysql replace schema


【解决方案1】:

我建议您看看 vim、sed、awk 以及您可以在 Linux(有时也在 Windows)上找到的许多其他文本编辑器和文本处理实用程序。 100,000 条记录在记事本中可能会很痛苦,但对于真正的 文本处理实用程序来说却是小菜一碟。

例如,从foobar.txt 中删除所有# 字符:

sed 's/#//g' foobar.txt > foobar-clean.txt

或者,与在 (g)vim 中打开的文件相同:

:%s/#//g

【讨论】:

  • 这很有趣也很有帮助。谢谢。但是,使用文本编辑器仍然需要额外的步骤,我真的很想简化这个过程。同样,我很想知道 MySQL 是否可以处理这种事情。有没有办法在 MySQL 中做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多