MariaDB V10.4 如何删除 json array 数组中的多个元素

使用 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 ;

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页