sql >> Databáze >  >> RDS >> Mysql

Jak používat Regexp v MySQL Replace Commands?

Jak již uvedli jiní, v MySQL to udělat nemůžete. Zdá se však, že se jedná o jednorázovou operaci, kterou musíte udělat, a tak jsem vám napsal rychlý a špinavý malý php skript, který tuto práci provede. Předpokládá se, že vaše tabulka node_revisions má sloupec primárního klíče s názvem 'id'. Pokud ne, upravte odpovídajícím způsobem. Nezapomeňte také změnit hostitele databáze, uživatelské jméno, heslo a název databáze v horní části skriptu, aby odpovídaly vaší konfiguraci.


<?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);
?>

Všimněte si také, že jsem na regulární výrazy použil nenasytný modifikátor, takže pokud máte více adres URL pdf v poli těla nebo upoutávky, neztratíte vše mezi nimi.



  1. Jak získat čtvrtletní datum v Oracle?

  2. Proč Oracle 9i považuje prázdný řetězec za NULL?

  3. Hromadné vkládání do MYSQL ze souborů XML

  4. Jak MINUTE() funguje v MariaDB