首页 > 解决方案 > mysql json_extract 函数

问题描述

我的 mysql 列名为json

{"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,我如何获取结果?

标签: mysqljson

解决方案


JSON_EXTRACT在您的情况下返回带引号的字符串"82,191",因此对于搜索,您可以使用JSON_UNQUOTEFIND_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')

推荐阅读