它看起来没有很好的内置方法来做这个,并且在这个主题上仍然没有好的答案,所以我想我会添加我的快速和肮脏的解决方案。 如果执行下面的代码,它将创建一个名为MY_JSON_INTERSECT的函数,该函数将完全按照指定的原始海报输出结果。 确保你看过这个并且在信任我的代码之前创建一个新函数是正常的:

delimiter $$

CREATE FUNCTION `MY_JSON_INTERSECT`(Array1 VARCHAR(1024), Array2 VARCHAR(1024)) RETURNS varchar(1024)

BEGIN

DECLARE x int;

DECLARE val, output varchar(1024);

SET output = '[]';

SET x = 0;

IF JSON_LENGTH(Array2) < JSON_LENGTH(Array1) THEN

SET val = Array2;

SET Array2 = Array1;

SET Array1 = val;

END IF;

WHILE x < JSON_LENGTH(Array1) DO

SET val = JSON_EXTRACT(Array1, CONCAT('$[',x,']'));

IF JSON_CONTAINS(Array2,val) THEN

SET output = JSON_MERGE(output,val);

END IF;

SET x = x + 1;

END WHILE;

IF JSON_LENGTH(output) = 0 THEN

RETURN NULL;

ELSE

RETURN output;

END IF;

END$$

然后你可以这样调用这个函数:

SELECT MY_JSON_INTERSECT('[1,2,3,4,5,6,7,8]','[0,3,5,7,9]');

输出:

[3,5,7]

这不是很美好或有效,但它是有效的...希望很快会有更好的答案。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐