MySQL表:如何从所有字段中删除特定字符?

时间:2011-04-22 04:25:26

标签: mysql replace schema

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

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

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

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

但必须为每一栏命名是一件麻烦事。无论如何,我想找到一个更优雅的解决方案。今天,我在互联网上找到了一个看起来像个开头的片段:

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

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

有一种简单的方法吗?或者我希望得到太多?

我是初学者,所以非常感谢明确,简单的解释。

提前致谢。

更多信息:

  1. 自从我的第一篇文章发布以来,我发现我的服务器上不允许存储过程。太糟糕了。
  2. 无论如何,我已经尝试过这个新代码,只是为了开始:
  3. 设置@ mytablestring ='mytable';

    设置@ mycolumnnumber = 1;

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

    SELECT @mycolumnname FROM mytable;

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

    如果有人知道如何解决这个问题,我真的很感激一些帮助。

    非常感谢。

1 个答案:

答案 0 :(得分:0)

我建议您查看vim,sed,awk以及许多其他文本编辑器和文本处理实用程序,您可以在Linux上找到它们(有时也可以在Windows上找到)。在记事本中,100,000条记录可能很难,但对于真正的文本处理实用程序来说,这是一块蛋糕。

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

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

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

:%s/#//g