2015-09-16 26 views
0

我在表中有很多不好的数据,并希望有一个我可以用来编辑这些数据的查询。MySQL查询替换字符串中所有正则表达式的出现

[{"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

MySQL不绑定正则表达式替换函数。如果您有权限,则必须使用一些用户定义的函数。 https://github.com/hholzgra/mysql-udf-regexp – hjpotter92

回答

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函数参数,将匹配你需要删除的内容。

+0

MariaDB确实有这样的功能。 –

+0

我假设他只有MySQL并且不想或不能混淆数据库服务器。 – Ozzy