使用字符串函数组装所需的 JSON,然后将其转换为 JSON。
示例数据
create table data (json json, timestamp datetime);
insert into data values
('{"a": 1}', '2016-10-01 00:00:00'),
('{"b": 2}', '2016-10-01 00:00:00'),
('{"c": 3}', '2016-10-01 11:11:11'),
('{}', '2016-10-01 11:11:11'),
('{"c": 33}', '2016-10-01 11:11:11');
查询以合并按时间戳分组的所有 json 值
select cast(
concat('{', -- wrap everything in root object '{ ... }'
group_concat(
-- strip parenthesis from individual item representation
-- '{"foo": 1}' -> '"foo": 1'
substring(json, 2, length(json) - 2)),
'}') as json) json,
timestamp
from data
-- skip empty JSON values to avoid getting extra comma during
-- group_concat
where json != JSON_OBJECT()
group by timestamp;
查询结果
+------------------+---------------------+
| json | timestamp |
|------------------+---------------------|
| {"a": 1, "b": 2} | 2016-10-01 00:00:00 |
| {"c": 3} | 2016-10-01 11:11:11 |
+------------------+---------------------+
几个注意事项:
- 这个sn-p的行为不同于
JSON_MERGE(),例如:
- 当两个或多个属性具有相同的名称时,它们的值是
被覆盖而不是被合并到值数组中
- 无法将对象与数组合并
- 提供的解决方案仅适用于作为顶级实体的对象
而不是数组。可以对其进行修改以使用数组。
- 如果依赖于 JSON 对象的字符串表示开始并且
以大括号
{} 结尾。这可能会在未来的版本中改变
服务器。