MySQL查询替换字符串中正则表达式的所有出现

时间:2015-09-16 10:01:14

标签: mysql regex

我在表格中有很多不良数据,希望我可以使用这些数据来编辑这些数据。

[{"type":"user","id":"584851"},"2":{"type":"user","id":"180269"},"3":{"type":"user","id":"140535"}]

以及我需要它看看......

[{"type":"user","id":"584851"},{"type":"user","id":"180269"},{"type":"user","id":"140535"}]

所以基本上删除所有出现的' " 2":' (数量会有所不同)

是否有一个简单的查询来执行此操作,还是需要在php中编写一些内容来完成这项工作?

1 个答案:

答案 0 :(得分:1)

不幸的是,MySQL没有REGEX_REPLACE函数或等效函数,可以让你运行一个简单的更新查询。我建议的下一个最好的事情是使用您选择的语言循环遍历表中的每条记录,并在其上应用正则表达式替换并保存。我在PHP下面举了一个例子:

$db = new PDO(sprintf('mysql:host=%s;dbname=%s', $host, $dbname), $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$query = $db->query('select * from `table`');

foreach ($query->fetch(PDO::FETCH_OBJ) as $row) {

    $update = $db->prepare('update `table` set `data` = ? where `id` = ?');
    $update->execute([
        preg_replace('/"\d+":{/', '', $row->data),
        $row->id
    ]);
}

已对表结构做出了假设,但代码的重要部分是preg_replace参数,该参数将与您需要删除的内容相匹配。