mysql中json_contains和json_search的区别

内容分享2个月前发布
1 0 0

共同点

  • 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 这个字符串,而并不需要知道它在什么位置。

© 版权声明

相关文章

暂无评论

none
暂无评论...