假设我有一个像这样的MySQL表:
此表可由
创建CREATE TABLE `MyTable` (
`JsonData` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`ExtractedData` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL
);
INSERT INTO MyTable (JsonData, ExtractedData)
VALUES ('[10, 20, 30]', NULL);
INSERT INTO MyTable (JsonData, ExtractedData)
VALUES ('["a", "b"]', NULL);
INSERT INTO MyTable (JsonData, ExtractedData)
VALUES ('["q", "w", "e", "r"]', NULL);
如何将json数据的倒数第二个元素复制到ExtractedData
?
我的意思是我想更新表格,看起来像这样:
我发现select @len := JSON_LENGTH(JsonData) from MyTable;
能够获得每个JsonData
的长度。
我还发现UPDATE MyTable SET ExtractedData = JSON_EXTRACT(JsonData, '$[0]');
能够将JsonData
的第一个元素复制到ExtractedData
。
如何组合2个命令,以便将最后一个元素复制到ExtracedData
?
UPDATE MyTable SET ExtractedData = JSON_EXTRACT(JsonData, '$[@len-2]');
不起作用。
答案 0 :(得分:2)
如果使用MySQL 8.0,则可以使用以下内容提取第二个json项:
JSON_EXTRACT(JsonData, '$[last-1]');
如此处所述:11.6 The Json Data Type。
答案 1 :(得分:1)
@len
这是一张桌子。您无法将其自动化到每个更新行。
您需要内联长度,例如
UPDATE MyTable SET ExtractedData = JSON_EXTRACT(JsonData, CONCAT('$[',JSON_LENGTH(JsonData)-1,']'));
处查看小提琴