从存储在MySQL数据库中的json字符串中删除键:值

时间:2016-03-01 14:02:40

标签: mysql sql mysql-json

我在表格中有一列以格式存储:

{"field1":"val1","field2":"val4"}
{"field1":"val2","field2":"val5"}
{"field1":"val3","field2":"val6"}

我需要删除所有field1的值(例如" field1":" val1"," field1":" val2",& #34; field1":" val3"),结果应为

{"field2":"val4"}
{"field2":"val5"}
{"field2":"val6"}

我试图通过替换来实现这一点,但仍然停留在'" field1":" val1"' string val1可以是任何值,如null,某个整数。

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

由于val1的动态值,我陷入困境。

2 个答案:

答案 0 :(得分:14)

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

UPDATE emp
SET emp.col = JSON_REMOVE(emp.col, '$.field1');

您还可以添加WHERE子句:

WHERE emp.col LIKE '%val6%';

参考文献: MySQL JSON_REMOVEMySQL JSON path

包含示例的博文: MySQL for your JSON

关于MySQL中json路径的说明:

  

如果属性标识符包含interpunction(空格,特殊字符,元字符)bugs.mysql.com

,则路径中的属性名称必须加双引号

答案 1 :(得分:-1)

你可以这样做:

SELECT SUBSTRING(Field, 1, INSTR(Field, '"field1"')) + SUBSTRING(Field, INSTR(Field, '"field2"'), LENGTH(Field)) FROM @Temp

我不知道这是否有效,但这是个主意。 (不能测试ATM)

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

SELECT SUBSTRING(Field, 0, CHARINDEX('"field1"', Field)) + SUBSTRING(Field, CHARINDEX('"field2"', Field), LEN(Field)) FROM @Temp