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
。