共同点
- json数组和json对象都可以使用
- 俩方法都是用来确定某个字符串是否在该json中
- 且都是只能查找value,不能查找key
差异
- 俩方法的参数和返回值不同,也是该文章重点介绍的。
json_contains
json_contains参数需要指定path,path如果不存在返回Null,path存在但是指定值不存在返回0,指定值存在则返回1。该函数需要注意的地方请查看该文章
mysql> select json_contains(remarks, "xiaoyu" , $.name ) from order_remarks;
+--------------------------------------------+
| json_contains(remarks, "xiaoyu" , $.name ) |
+--------------------------------------------+
| NULL |
| NULL |
| NULL |
| 1 |
| 1 |
| 1 |
| NULL |
| NULL |
| 0 |
+--------------------------------------------+
json_search
json_search(json_doc,one_or_all,search_str [,escape_char [, path]])
和json_contains相比,该函数不需要指定具体的path,更像是like一样的模糊查询。
如果查询的str存在,则返回具体的path,如果不存在则返回null。
mysql> select json_search(remarks, one , xiaoyu ) from order_remarks;
+-------------------------------------+
| json_search(remarks, one , xiaoyu ) |
+-------------------------------------+
| NULL |
| NULL |
| NULL |
| "$.name" |
| "$.name" |
| "$.name" |
| NULL |
| NULL |
| NULL |
+-------------------------------------+
注意
json_search()只能搜索字符串,而不能搜索整形。
列如 str字段值为{“name”:”xiaoyu”,”old”:12}
mysql> select json_search(str, one ,12) from order_remarks;
+-------------------------------------+
| json_search(remarks, one , xiaoyu ) |
+-------------------------------------+
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
+-------------------------------------+
总结
json_contains适合用于指定path的查询,而json_search适合模糊查询,列如说看下json中是否有 hello 这个字符串,而并不需要知道它在什么位置。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...



