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