从MySQL数据库中存储的json字符串中删除key:value

从MySQL数据库中存储的json字符串中删除key:value,mysql,sql,mysql-json,Mysql,Sql,Mysql Json,表中有一列以以下格式存储: {"field1":"val1","field2":"val4"} {"field1":"val2","field2":"val5"} {"field1":"val3","field2":"val6"} 我需要删除所有带有值的field1(例如“field1”:“val1”、“field1”:“val2”、“field1”:“val3”),结果应为 {"field2":"val4"} {"field2":"val5"} {"field2":"val6"} 我试图通

表中有一列以以下格式存储:

{"field1":"val1","field2":"val4"}
{"field1":"val2","field2":"val5"}
{"field1":"val3","field2":"val6"}
我需要删除所有带有值的field1(例如“field1”:“val1”、“field1”:“val2”、“field1”:“val3”),结果应为

{"field2":"val4"}
{"field2":"val5"}
{"field2":"val6"}
我试图通过replace实现这一点,但被困在“field1”中:“val1”字符串val1可以是任何值,比如null,或者某个整数

UPDATE emp SET col = REPLACE(col, '"field1":"val1"', '')

由于val1的这个动态值,我被卡住了。

您可以这样做:

SELECT SUBSTRING(Field, 1, INSTR(Field, '"field1"')) + SUBSTRING(Field, INSTR(Field, '"field2"'), LENGTH(Field)) FROM @Temp
我不知道这是否有效,但这就是我的想法。(无法测试ATM)

以下是MsSQL等价物(有效,刚刚测试过!):


我更喜欢使用JSON_REMOVE函数(MySQL):

还可以添加WHERE子句:

WHERE emp.col LIKE '%val6%';
参考资料:及

一篇带有示例的博客文章:

还有一个关于MySQL中json路径的说明:

如果属性标识符包含函数间(空格、特殊字符、元字符),则路径中的属性名称必须双引号


您需要使用正则表达式来实现这一点。看见然而,有些人似乎已经找到了解决方法。如果您使用php,您可以迭代每一行,并使用下面的代码来获取特定行,而不使用field1$str='{“field1”:“val1”,“field2”:“val4”}$数组=json_解码($str);foreach($key=>$value的数组){if($key==“field1”)继续;否则回显“$key:$value
”;}
UPDATE emp
SET emp.col = JSON_REMOVE(emp.col, '$.field1');
WHERE emp.col LIKE '%val6%';