복붙노트

[SQL] MySQL의 모든 필드를 교체

SQL

MySQL의 모든 필드를 교체

나는 REPLACE 명령을 사용하여 테이블의 컬럼에서 일부 문자를 교체해야합니다. 내가 명령이 열 이름을 필요로 교체 할 것을 알고, 다음 (다음 예에서 'A'문자) 변화에 텍스트와 새 텍스트 (다음과 같은 경우, 'E'문자).

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

그래서이 명령을 실행하면 'E'문자로 MY_TABLE 테이블의 my_column 열에서 모든 'A'항목을 변경됩니다.

내가 실행해야한다면 무엇을 모든 열에 대한 명령뿐 아니라 하나 교체? 이것이 가능한가?

감사

해결법

  1. ==============================

    1.모든 컬럼에 값을 교체해야하는 SQL 쿼리를 생성하려면 다음 SQL 쿼리를 사용합니다.

    모든 컬럼에 값을 교체해야하는 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 쿼리를 실행 한 후 단순히 모든 값을 대체하는 모든 쿼리를 실행합니다.

    일부 인터넷 검색 후 테스트되지 않은

    이 같은 코어와 저장 프로 시저를 만듭니다. 그것은 테이블의 이름을 받아 들일 수, 값은 찾을 수 및 대한 값 대체 할 수 있습니다.

    주요 아이디어는 사용하는 것입니다 :

    아래 부분의 코드 (테스트되지 않은)를 참조하십시오.

    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;
    
  2. ==============================

    2.나는 하나의 작은 변화를 만들어 :

    나는 하나의 작은 변화를 만들어 :

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

    어느 TABLENAME의 변수 (조금 덜 입력)를 사용합니다 - 만 대문자로 물건을 교체해야하므로.

    또한, 나는 처음에는 이해하지 못했지만, 이것은 단지 출력이 다음 실행해야 SQL 쿼리의 목록은 실제로 코드를 대체 할 것입니다. 도움이 되었기를 바랍니다...

  3. ==============================

    3.MySQL의 물건을 자주 PHP가 포함되어 있기 때문에이 일부 PHP와 트릭을 할 것입니다. 테스트 및 작동 :)

    MySQL의 물건을 자주 PHP가 포함되어 있기 때문에이 일부 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);
                }
        }
    
    ?>
    
  4. ==============================

    4.당신은 당신이 원하는 것을 할 수 없습니다. 그것은 나를라면, 난 열 이름의 목록을 내 편집기에서 빠른 정규식 검색을 수행하고 교체 할 것입니다.

    당신은 당신이 원하는 것을 할 수 없습니다. 그것은 나를라면, 난 열 이름의 목록을 내 편집기에서 빠른 정규식 검색을 수행하고 교체 할 것입니다.

    찾기 : (+).

    교체 : UPDATE MY_TABLE SET \ 1 = REPLACE (\ 1, 'A', 'E');

  5. from https://stackoverflow.com/questions/3145076/replace-all-fields-in-mysql by cc-by-sa and MIT license