sql >> データベース >  >> RDS >> Mysql

MySQL置換コマンドで正規表現を使用する方法は?

    他の人がすでに述べたように、MySQLではこれを行うことはできません。ただし、これは1回限りの操作であるように思われるため、この作業を実行するためのすばやく汚い小さなphpスクリプトを作成しました。 node_revisionsテーブルに「id」という主キー列があることを前提としています。そうでない場合は、適切に編集してください。また、スクリプトの上部にあるデータベースホスト、ユーザー名、パスワード、データベース名を、構成に合わせて変更することを忘れないでください。

    
    <?php
    $host = '127.0.0.1';
    $username = 'root';
    $password = 'password';
    $database = 'test';
    
    $conn = mysql_connect($host, $username, $password);
    
    if (!$conn) {
        echo "Unable to connect to DB: " . mysql_error();
        exit;
    }
    
    if (!mysql_select_db($database)) {
        echo "Unable to select " . $database . ": " . mysql_error();
        exit;
    }
    
    $sql = "SELECT * FROM node_revisions";
    
    $result = mysql_query($sql);
    
    if (!$result) {
        echo "Could not successfully run query ($sql) from DB: " . mysql_error();
        exit;
    }
    
    if (mysql_num_rows($result) == 0) {
        echo "No rows found, nothing to print so am exiting";
        exit;
    }
    
    while ($row = mysql_fetch_assoc($result)) {
        $id = $row['id'];
        $body = $row['body'];
        $teaser = $row['teaser'];
        $body = preg_replace('/http:\/\/.*?\.pdf/', '/migration-update', $body);
        $teaser = preg_replace('/http:\/\/.*?\.pdf/', '/migration-update', $teaser);
        $sql = "UPDATE node_revisions set body='" . mysql_real_escape_string($body) . "', teaser='" . mysql_real_escape_string($teaser) . "' where id=" . $id;
        mysql_query($sql);
    }
    
    mysql_free_result($result);
    mysql_close($conn);
    ?>
    

    また、正規表現に貪欲でない修飾子を使用したため、本文またはティーザーフィールドに複数のpdf URLがある場合でも、それらの間のすべてが失われることはありません。



    1. ゲームの先を行くSQLServerパフォーマンスメトリクス

    2. Pythonを使用してOracleデータベースにバッチ挿入するにはどうすればよいですか?

    3. MySQL正規表現はUnicodeマッチングをサポートしていますか

    4. SQL-特定の値を持つ行をカウントする