mysql json类型数据查询(+判空、类型踩坑) | 您所在的位置:网站首页 › sql查询为空 › mysql json类型数据查询(+判空、类型踩坑) |
mysql中json类型数据查询
查询返回所有包含键值对 {"key": "value"} 的JSON对象根据json中对象的值来查询数据
查询返回所有包含键值对 {“key”: “value”} 的JSON对象
用json_contains函数查询json包含某特定键值对的数据. 例如,假设有一个名为 json_data 的表,其中包含一个名为 data 的JSON类型列,可以使用以下查询来检索包含特定键值的JSON数据:: \\data { "name": "John", "age": 30, "address": { "city": "New York", "state": null } } //查询json中包含某一键值对的数据 select * from json_data where json_contains(data,'{"name": "John"}'); select * from json_data where json_contains(data,'{"age": 30}'); 根据json中对象的值来查询数据可以使用 -> 或 ->> 运算符从JSON对象中提取值。 **注意: ->返回一个 JSON 类型的值,这意味着可以继续使用 JSON 相关的函数和操作符来处理返回的结果,比如可以使用 -> 来获取 JSON 对象的属性值(eg.data->‘$.address.state’)。这里address是从data中取出的json类型属性,用->提取的仍返回json类型,因此可以继续从address中取出state属性。 ** ->>返回一个字符串类型的值,这意味着不能再使用 JSON 相关的函数和操作符来处理返回的结果,比如不能再使用 -> 来获取 JSON 对象的属性值。但是可以直接对返回的字符串进行字符串函数的操作。 //各类型键值对对应的值 select data->'$.name',data->>'$.name', data->'$.age',data->>'$.age' from json_data;
结果仅有3的查询结果为空,因为data->'$.age'得到的值是根据在json中的格式(此处应是整型),所以判断='30’结果不匹配。 然后坑就来了 假如要查询键值为null或者不为null的数据,用以下查询语句: select * from json_data where data->'$.address.state' is not null;表数据很简单,按理说上面的查询语句结果应该为空.但实际上: 结果依然不为空。 解决: 理解上述->和->>的区别再结合一个很重要的小知识mysql中的null用于表示缺少值或未知值。它不等于空字符串、0或任何其他值。 因此json中的null并不ismysql中的null。所以需要把键值转换为字符串再作比较: //->>'$.{}'得到的值会被转换成字符串,即可与'null'做比较判断 select * from json_data where data->>'$.address.state' != 'null'; |
CopyRight 2018-2019 实验室设备网 版权所有 |