Replace all fields in MySQL

前端 未结 4 1891
情歌与酒
情歌与酒 2020-11-30 11:30

I need to replace some chars in the columns of a table, by using the REPLACE command.
I know that the REPLACE command needs a column name, t

相关标签:
4条回答
  • 2020-11-30 11:59

    You can't do what you want. If it was me, i'd take a list of column names and in my editor do a quick regex search and replace.

    Find: (.+)

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

    0 讨论(0)
  • 2020-11-30 12:02

    This will do the trick with some PHP since MySQL stuff often includes PHP. Tested and working :)

    <?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 讨论(0)
  • 2020-11-30 12:17

    Use the following SQL query to generate the SQL queries that you need to replace a value in all columns.

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

    After executing this SQL query simply run all queries to replace all values.


    Untested after some googling

    Create a stored procedure with a core like this. It can accept the name of the table, the value to find and the value to replace for.

    The main idea is to use:

    1. prepared statements for dynamic SQL execution;
    2. cursors to iterate over all columns of a table.

    See partial code (untested) below.

    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 讨论(0)
  • 2020-11-30 12:22

    I made one minor change:

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

    Which will use the variable for TABLENAME (just a bit less typing) - so you only need to replace the stuff in caps.

    Also, I didn't understand at first, but this will only output a list of SQL Queries which you then have to execute to actually replace the code. Hope this helps...

    0 讨论(0)
提交回复
热议问题