UPDATE:这在MySQL 8中现在可以通过JSON_表函数实现:https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html
我很喜欢MySQL 5.7中的新JSON函数,但在try 将JSON中的值合并到正常表 struct 时遇到了问题.
获取JSON、操作并从中提取数组等都很简单.一路提取.但是反过来呢,从JSON数组到行呢?也许我对现有的MySQL JSON功能很了解,但我还没有弄明白这一点.
例如,假设我有一个JSON数组,并想为数组中的每个元素插入一行及其值?我找到的唯一方法是编写一组JSON_EXTRACT(…'$[0]')JSON_EXTRACT(…'$[1]')等,并将它们结合在一起.
或者,假设我有一个JSON数组,想要将它分组为一个逗号分隔的字符串?
换句话说,我知道我能做到:
SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, CONCAT('$[', x.n, ']'))) AS val
FROM
(
SELECT 0 AS n
UNION
SELECT 1 AS n
UNION
SELECT 2 AS n
UNION
SELECT 3 AS n
UNION
SELECT 4 AS n
UNION
SELECT 5 AS n
) x
WHERE x.n < JSON_LENGTH(@j);
但这伤了我的眼睛.还有我的心.
我怎样才能做到:
SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, '$[ * ]'))
... 让它将数组中的值与JSON数组本身连接起来?
我想我在这里要寻找的是某种JSON_分割,大致如下:
SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(val)
FROM
JSON_SPLIT(JSON_EXTRACT(@j, '$[ * ]'), '$')
如果MySQL有一个正确的STRING_SPLIT(val,'separator')表返回函数,我可以破解它(该死的转义),但这也不可用.