2011-04-22 77 views
2

每個星期,我都必須完全替換幾個非常大的MySQL表中的數據。因此,我通常會做的是刪除現有數據,導入新數據,然後運行我通常的查詢以根據需要修改新數據。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. 不管怎麼說,我曾嘗試這個新的代碼,剛上手:

集@ mytablestring = 'MYTABLE';

set @ 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

是否有任何理由你不」只是組裝一個腳本或編寫一個清理數據的SQL語句過程? – Thomas 2011-04-22 04:57:45

+0

是的,有一個很好的理由:我不知道如何。當然,我可以編寫100個或更多不同的查詢來更新單個列,但我希望有一個更好的解決方案,其中一個查詢可以搜索整個表。有不少論壇在各種論壇上提出這個問題,但我從來沒有看到它以簡單的方式回答,也沒有求助於文本編輯器,也沒有爲每一列編寫單獨的查詢。所以我很想知道MySQL是否具有多功能和強大的功能來處理這種事情。謝謝。 – Inquisitive 2011-04-22 12:26:05

回答

0

我建議你看一下vim,sed,awk和許多其他的文本編輯器和文本處理工具,你可以在Linux上找到(有時也可以在Windows上)。在記事本中有100,000條記錄可能會很痛苦,但對於真正的文本處理實用程序來說,這是一塊蛋糕。

例如,從foobar.txt去除所有#字符:

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

或者,與該文件同樣的事情(G)VIM打開:

:%s/#//g 
+0

這非常有趣和有幫助。謝謝。 但是,使用文本編輯器仍然需要額外的步驟,我真的很想簡化這個過程。另外,我很想知道MySQL是否可以處理這種事情。 有沒有辦法在MySQL中做到這一點? – Inquisitive 2011-04-22 12:14:12

相關問題