2010-06-29 135 views
9

我需要使用REPLACE命令替換表中某些列的某些字符。
我知道REPLACE命令需要列名,然後改變文本(在下面的例子中,'a'字符)和新的文本(在下面的情況下,'e'字符)。替換MySQL中的所有字段

UPDATE my_table SET my_column = REPLACE (my_column,'a','e'); 

讓執行這個命令將改變所有的「一個」出現在my_table表的內容與「è」字符的my_column列。

但是如果我需要爲每一列執行REPLACE命令而不是隻爲一個命令呢?這可能嗎?

謝謝

+0

dba.stackexchange.com/questions/21147/query-to-find-and-replace-text-in-all-tables-and-fields-of-a-mysql- db – Foreever 2015-10-15 05:23:49

回答

8

使用下列SQL查詢來生成您需要的所有列替換值的SQL查詢。

select concat(
     'UPDATE my_table SET ', 
     column_name, 
     ' = REPLACE(', column_name, ', ''a'', ''e'');') 
from information_schema.columns 
where table_name = 'my_table'; 

執行此SQL查詢後,只需運行所有查詢即可替換所有值。


未經測試後,一些使用Google

與這樣的核心創建一個存儲過程。它可以接受表格的名稱,要查找的值和要替換的值。

的主要思想是使用:

  1. 動態SQL執行準備的語句;
  2. 要遍歷表的所有列的遊標。

查看部分代碼(未經測試)在下面。

DECLARE done INT DEFAULT 0; 
DECLARE cur1 CURSOR FOR 
    SELECT column_name FROM information_schema.columns 
    WHERE table_name = 'my_table'; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

OPEN cur1; 
REPEAT 
    SET s = concat(
     'UPDATE my_table SET ', 
     column_name, 
     ' = REPLACE(', column_name, ', ''a'', ''e'');'); 
    PREPARE stmt2 FROM s; 
    EXECUTE stmt2; 
    FETCH cur1 INTO a; 
UNTIL done END REPEAT; 
CLOSE cur1; 
+0

您需要檢查WHERE以確保您只在使用基於文本的數據類型的列上運行文本替換;)。這可以使用MySQL準備語句(動態SQL)... – 2010-06-29 22:10:11

+0

隨時編輯我的答案@OMG小馬 – 2010-06-29 22:20:06

+0

我認爲,但也許我錯了,建議的查詢需要一個逗號在位置(4, 36)。現在它生成 UPDATE my_table SET my_column = REPLACE(my_column'ù','ù'); 而不是 UPDATE my_table SET my_column = REPLACE(my_column,'¹','ù'); – Mark 2010-06-29 22:26:39

0

你不能做你想做的。如果是我,我會列出一列列名,然後在我的編輯器中快速執行正則表達式搜索和替換。

Find: (.+)

Replace: UPDATE my_table SET \1 = REPLACE (\1,'a','e');

5

我做了一個微小的變化:

select concat(
    'UPDATE ', table_name, ' SET ', 
    column_name, 
    ' = REPLACE(', column_name, ', ''OLDTEXT'', ''NEWTEXT'');') 
from information_schema.columns 
where table_name = 'TABLENAME'; 

這將使用TABLENAME變量(只是有點少打字) - 所以你只需要更換的東西,在帽。

此外,我一開始並不明白,但這隻會輸出 SQL查詢的列表,然後您必須執行以實際替換代碼。希望這有助於...

1

這將做一些PHP的伎倆,因爲MySQL的東西通常包括PHP。 測試和工作:)

<?php 

     $host = 'localhost'; 
     $user = 'root'; 
     $pass = 'yourpass'; 
     $db = 'your_database_name'; 

     $connection = mysql_connect($host, $user, $pass); 
     mysql_select_db($db); 

     $thisword = "this one should be"; 
     $shouldbe = "like this"; 
     $thistable = "your_table_name"; 

     MySQL_replace_all($thisword, $shouldbe, $thistable); 

     function MySQL_replace_all($thisword,$shouldbe,$thistable){ 
      $cnamnes = "SHOW columns FROM " . $thistable; 
      $result = mysql_query($cnamnes); 
      while($columnname = mysql_fetch_row($result)){ 
       $replace_SQL = "UPDATE $thistable SET ". $columnname[0] ." = REPLACE(". $columnname[0] .",'". $thisword ."', '". $shouldbe ."');"; 
       echo $replace_SQL . "<br>"; 
       mysql_query($replace_SQL); 
      } 
    } 

?> 
+0

Upvoted由於幾個原因。首先,雖然可能存在一些非常複雜的方法來做到這一點,但你仍然設法發佈* WILL *工作的東西。其次,你要努力提供一個完整的PHP文件來做到這一點,這對剛剛開始的人很有幫助。 – John 2014-02-21 20:43:00

+0

謝謝!尼斯音樂在您的網頁:)軌道04 .. – 2014-02-23 12:04:59

+0

@carl_lingberg不客氣,播放列表2.8?如果是的話,我做了那首歌。 – John 2014-02-24 19:05:22

相關問題