【发布时间】: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 中执行此操作。我也不知道如何在到达最后一列后停止循环,以避免出现错误消息。
有没有简单的方法来做到这一点?还是我希望太多?
我是初学者,因此非常感谢您提供清晰,简单的解释。
提前致谢。
更多信息:
- 自从我第一次发帖以来,我发现我的服务器上不允许存储过程。太糟糕了。
- 无论如何,我已经尝试过这个新代码,只是为了开始:
设置@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 是否具有足够的通用性和强大的功能来处理这种事情。谢谢。