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 ;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值