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 ;

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页
评论

打赏作者

mostone

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值