MySQL JSON_OVERLAPS() 函数使用指南
MySQL JSON_OVERLAPS() 函数检测两个 JSON 文档是否拥有任何一个相同键值对或数组元素。
JSON_OVERLAPS() 语法
这里是 MySQL JSON_OVERLAPS() 的语法:
JSON_OVERLAPS(json1, json2)
参数
json1- 必需的。一个 JSON 文档。
json2- 必需的。另一个 JSON 文档。
返回值
JSON_OVERLAPS() 函数检测两个 JSON 文档是否拥有任何一个相同键值对或数组元素。如果两个 JSON 文档有重叠的内容,JSON_OVERLAPS() 函数返回 1,否则返回 0。
JSON_OVERLAPS() 函数按照如下规则比较两个 JSON 文档:
- 比较两个数组时,如果两个数组至少有一个相同的元素返回
1,否则返回0。 - 比较两个对象时,如果两个对象至少有一个相同的键值对返回
1,否则返回0。 - 比较两个纯值时,如果两个值相同返回
1,否则返回0。 - 比较纯值和数组时,如果值是这个数组中的直接元素返回
1,否则返回0。 - 比较纯值和对象的结果为
0。 - 比较数组和对象的结果为
0。 JSON_OVERLAPS()不会对参数的数据类型进行转换。
如果参数为 NULL,此函数将返回 NULL。
如果任意一个参数不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用 JSON_VALID() 验证 JSON 文档的有效性。
JSON_OVERLAPS() 示例
这里列出了几个常见的 JSON_OVERLAPS() 用法示例。
比较数组
SELECT JSON_OVERLAPS('[1, 2, 3]', '[3, 4, 5]');
+-----------------------------------------+
| JSON_OVERLAPS('[1, 2, 3]', '[3, 4, 5]') |
+-----------------------------------------+
| 1 |
+-----------------------------------------+这里,由于两个数组都有共同的元素 3,因此 JSON_OVERLAPS() 返回了 1。也就是说 [1, 2, 3] 和 [3, 4, 5] 有重叠。
让我们再看一个例子:
SELECT JSON_OVERLAPS('[1, 2, [3]]', '[3, 4, 5]');
+-------------------------------------------+
| JSON_OVERLAPS('[1, 2, [3]]', '[3, 4, 5]') |
+-------------------------------------------+
| 0 |
+-------------------------------------------+这里,由于 [1, 2, [3]] 中的元素 [3] 和 [3, 4, 5] 中的 3 是不同的,因此 JSON_OVERLAPS() 返回了 0。也就是说 [1, 2, [3]] 和 [3, 4, 5] 没有交集。
比较对象
SELECT
JSON_OVERLAPS('{"x": 1}', '{"x": 1, "y": 2}'),
JSON_OVERLAPS('{"x": 1}', '{"y": 2}');
+-----------------------------------------------+---------------------------------------+
| JSON_OVERLAPS('{"x": 1}', '{"x": 1, "y": 2}') | JSON_OVERLAPS('{"x": 1}', '{"y": 2}') |
+-----------------------------------------------+---------------------------------------+
| 1 | 0 |
+-----------------------------------------------+---------------------------------------+这里, {"x": 1} 和 {"x": 1, "y": 2} 都有共同的键值对 "x": 1,因此 JSON_OVERLAPS() 返回了 1。
而 {"x": 1} 和 {"y": 2} 没有共同的键值对,因此 JSON_OVERLAPS() 返回了 0。
比较纯值和数组
SELECT
JSON_OVERLAPS('[1, 2, 3]', '3'),
JSON_OVERLAPS('[1, 2, [3]]', '3');
+---------------------------------+-----------------------------------+
| JSON_OVERLAPS('[1, 2, 3]', '3') | JSON_OVERLAPS('[1, 2, [3]]', '3') |
+---------------------------------+-----------------------------------+
| 1 | 0 |
+---------------------------------+-----------------------------------+这里,3 是 [1, 2, 3] 的元素,而不是 [1, 2, [3]] 的元素,因此他们返回了不同的结果。
比较纯值
SELECT JSON_OVERLAPS('1', '1'), JSON_OVERLAPS('1', '"1"');
+-------------------------+---------------------------+
| JSON_OVERLAPS('1', '1') | JSON_OVERLAPS('1', '"1"') |
+-------------------------+---------------------------+
| 1 | 0 |
+-------------------------+---------------------------+这里,由于 1 和 "1" 是不同类型的数据,因此 JSON_OVERLAPS() 返回了 0。