提问者:小点点

mysql json_extract函数


名为JSONmysql专栏:

{"myarray":[ { "users":"82,191", type":"3" } ]}

这在表列json上面,我想找到id为191的用户。 82工作正常。 但191个没有找到。

我的sql查询是:

SELECT id 
FROM tablename 
WHERE JSON_EXTRACT(json, CONCAT('$.myarray[0].users') ) IN (82) --this is working

SELECT id 
FROM tablename 
WHERE JSON_EXTRACT(json, CONCAT('$.myarray[0].users') ) IN (191) --but this is not working. nothing fetched. empty results.

如果json也有191,我如何获取结果?


共1个答案

匿名用户

在您的示例中,JSON_EXTRACT返回带引号的字符串“82,191”,因此对于搜索,您可以将JSON_UNQUOTE与FIND_IN_SET组合使用,如下所示:

SELECT id 
  FROM tablename 
 WHERE FIND_IN_SET(82, JSON_UNQUOTE(
    JSON_EXTRACT(json, '$.myarray[0].users')
  )) > 0;

或直接(不加引号)

SELECT id 
  FROM tablename 
 WHERE FIND_IN_SET (82, json ->> '$.myarray[0].users')