如何在 JSON 列中搜索空数组?
假设我有一个config
有时 JSON 等于的列{"tier": []}
.
WHERE JSON_CONTAINS(config, '', '$.tier') = 1
or
WHERE JSON_CONTAINS_PATH(config, 'one', '$.tier') = NULL
不返回任何结果。
我有什么遗漏的吗?
我专门四处寻找这个问题的答案,但在 SO 或 MySQL 文档上找不到任何内容。
这里有两种方法可以实现,在 MySQL 5.7.24 上测试:
mysql 5.7.24> select config from mytable
where json_contains(config, cast('[]' as json), '$.tier');
+--------------+
| config |
+--------------+
| {"tier": []} |
+--------------+
mysql 5.7.24> select config from mytable
where json_contains_path(config, 'one', '$.tier');
+--------------+
| config |
+--------------+
| {"tier": []} |
+--------------+
我找到了另一个解决方案,它有助于严格检查空数组:
首先,看到我有两行,其中一行有一个非空数组:
mysql 5.7.24> select config from mytable
where json_contains(config, json_array(), '$.tier');
+----------------------------------------+
| config |
+----------------------------------------+
| {"tier": []} |
| {"tier": [{"name": "BK", "value": 8}]} |
+----------------------------------------+
2 rows in set (0.00 sec)
现在我确保数组的长度为 0,以此来确认它是空的:
mysql 5.7.24> select config from mytable
where json_contains(config, json_array(), '$.tier')
and json_length(config, '$.tier') = 0;
+--------------+
| config |
+--------------+
| {"tier": []} |
+--------------+
1 row in set (0.00 sec)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)