1

我的表有一列带有嵌套对象的 JSON 字符串(因此简单的 REPLACE 函数无法解决此问题)。例如像这样:{'name':'bob', 'blob': {'foo':'bar'}, 'age': 12}。将值附加到 JSON 字符串末尾的最简单查询是什么?所以对于这个例子,我希望最终结果看起来像这样:{'name':'bob', 'blob': {'foo':'bar'}, 'age': 12, 'gender': 'male'}解决方案应该足够通用,可以适用于任何 JSON 值。

4

3 回答 3

2

那这个呢

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));
于 2013-06-14T00:06:27.910 回答
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')
于 2013-06-14T00:02:54.040 回答
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
于 2016-04-20T15:11:24.057 回答