使用 json_remove 可以按路径删除数组元素,但要一个一个地指定路径。
JSON_REMOVE(json_doc, path[, path] ...)
https://mariadb.com/kb/en/json_remove/
为了想丢进去一个数组,给我找出指定多个数值,然后从源数组中删除,尝试写了下面的函数。
delimiter $$
DROP FUNCTION IF EXISTS `pdfn_array_remove`$$
CREATE FUNCTION `pdfn_array_remove`(
`array` JSON,
`items` JSON
)
RETURNS json
COMMENT '从 JSON 数组中删除元素,仅针对 int 型数组'
BEGIN
DECLARE i INT UNSIGNED DEFAULT 0;
DECLARE size INT UNSIGNED DEFAULT JSON_LENGTH(items);
DECLARE path VARCHAR(255) DEFAULT NULL;
IF array IS NULL THEN
return JSON_ARRAY();
END IF;
-- search every item and remove from source array
WHILE i < size do
SET path := JSON_SEARCH(array, 'one', JSON_VALUE(items, CONCAT('$[', i, ']')));
IF path IS NOT NULL THEN
SET array := JSON_REMOVE(array, JSON_VALUE(path, '$'));
END IF;
SET i := i + 1;
END WHILE;
RETURN array;
END$$
delimiter ;
本文介绍了一种在MariaDB中使用自定义函数pdfn_array_remove批量从JSON数组中删除特定整数元素的方法。该函数通过遍历指定的整数数组,逐个查找并使用JSON_REMOVE函数从源数组中移除匹配的元素。
146

被折叠的 条评论
为什么被折叠?



