我将JSON数组作为字符串存储在MariaDB表中。当数组中的某些键值存在时,我想返回行。
我进行了以下测试。
set @json='[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]'
执行以下查询...
select json_value(@json,'$[0].name')='Albert'
它给了我想要的结果是...
1
甚至以下查询也给了我相同的结果(可能是“ *”被视为第一个元素)...
select json_value(@json,'$[*].name')='Albert'
但是当我在条件中提供第二个名字(“ John”)时,我没有得到任何结果...
select json_value(@json,'$[*].name')='John'
结果...
0
所以我的观察是,当我们提供数组索引时,“ json_value”函数能够返回所需的结果。
有没有一种方法可以避免指定数组索引并搜索所需的键值?
正如@dbfiddle所评论的那样,我尝试使用JSON_SEARCH函数。
这是我试图获得所需结果的方法。
create table label_test(labels VARCHAR(1000));
insert into label_test values ('[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]');
select * from label_test where JSON_SEARCH(labels,'all','John') like '"$[%].name"';
结果是整个行符合预期。
[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句