首页 > 解决方案 > 从 mysql 文本字段中的 json 中删除属性的最快方法

问题描述

我有一个 >100MM 行的表。他们有一个包含如下 json 字符串的结果文本列:

{"location":"us","name":"Jon Doe","html":"<html>...</html>"}

我想删除 html 或将其设置为 null:

{"location":"us","name":"Jon Doe","html":null}

直接的方法是在代码中加载行,然后对它们进行 json 解码,将 html 设置为 null 并再次保存它们。但是,这将永远花费所有行。

有没有更高效的方法来使用查询?

标签: mysqljson

解决方案


您可以连接通过从左到右方向搜索模式和反向SUBSTRING_INDEX()搜索模式的函数得出的结果:<html'/html>'

UPDATE tab
   SET json_col = CONCAT(
                         SUBSTRING_INDEX(json_col,'<html',1),
                         SUBSTRING_INDEX(json_col,'/html>',-1))

Demo


推荐阅读