我的表中有一列一个JSON字符串,它有嵌套对象(所以一个简单的REPLACE函数无法解决这个问题)。例如:{'name':'bob', 'blob': {'foo':'bar'}, 'age': 12}
。将值附加到JSON字符串末尾的最简单查询是什么?因此,对于该示例,我希望最终结果如下所示:{'name':'bob', 'blob': {'foo':'bar'}, 'age': 12, 'gender': 'male'}
解决方案应该足够通用,以适用于任何JSON值。
答案 0 :(得分:1)
这个怎么样?
UPDATE table SET table_field1 = CONCAT(table_field1,' This will be added.');
修改强>
在插入之前,我个人会用PHP这样的语言进行操作。更容易。无论如何,这是你想要的吗?这应该可以提供您正在添加的json格式,格式为{'key':'value'}
UPDATE table
SET col = CONCAT_WS(",", SUBSTRING(col, 1, CHAR_LENGTH(col) - 1),SUBSTRING('newjson', 2));
答案 1 :(得分:0)
我认为您可以使用REPLACE
函数来实现此目标
UPDATE table
SET column = REPLACE(column, '{\'name\':\'bob\', \'blob\': {\'foo\':\'bar\'}, \'age\': 12}', '{\'name\':\'bob\', \'blob\': {\'foo\':\'bar\'}, \'age\': 12, \'gender\': \'male\'}')
注意正确转义json中的所有引号
当您请求嵌套的json时,我认为您可以使用SUBSTRING
函数删除字符串的最后一个字符,然后使用CONCAT
UPDATE table
SET column = CONCAT(SUBSTRING(column, 0, -1), 'newjsontoappend')
答案 2 :(得分:0)
修改杰克的回答。在第一次更新时,甚至列值都是空的。
update table
set column_name = case when column_name is null or column_name =''
then "{'foo':'bar'}"
else CONCAT_WS(",", SUBSTRING(column_name, 1, CHAR_LENGTH(column_name) - 1),SUBSTRING("{'foo':'bar'}", 2))
end