每周,我必须完全替换几个非常大的MySQL表中的数据。所以我通常做的是删除现有数据,导入新数据,然后运行我常用的查询来根据需要修改新数据。
不幸的是,这些天我注意到新数据包含不需要的字符,例如引号和额外的空格。在其中一些表(AFAIK)中有超过100,000条记录,在导入之前,我无法轻松地在记事本中打开数据以去除不需要的字符。
我意识到我可以为每个表中的每一列写一个单独的查找和替换查询,如下所示:
UPDATE mytablename SET mycolumn = REPLACE(mycolumn, '"', '');
但必须为每一栏命名是一件麻烦事。无论如何,我想找到一个更优雅的解决方案。今天,我在互联网上找到了一个看起来像个开头的片段:
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);
SELECT @mycolumnname FROM mytable;
不幸的是,在最后的SELECT查询中,@ mycolumnname被解释为字符串,而不是列名。所以查询不起作用。如果我能够通过这个,我相信我可以通过递增@mycolumnnumber来编写一些代码来遍历列。
如果有人知道如何解决这个问题,我真的很感激一些帮助。
非常感谢。
答案 0 :(得分:0)
我建议您查看vim,sed,awk以及许多其他文本编辑器和文本处理实用程序,您可以在Linux上找到它们(有时也可以在Windows上找到)。在记事本中,100,000条记录可能很难,但对于真正的文本处理实用程序来说,这是一块蛋糕。
例如,要从#
中删除所有foobar.txt
个字符:
sed 's/#//g' foobar.txt > foobar-clean.txt
或者,与(g)vim中打开的文件相同:
:%s/#//g