mysql - 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,我如何获取结果?
解决方案
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')
推荐阅读
- macos - 部署错误:Tomcat 启动失败(Netbeans +Mac OS)
- javascript - 正确的登录页面模式
- ant - 使用 if with resourcecontains in 并且不返回真值
- javascript - 堆积图 - AmChart - Javascript
- css - 将整个博客和侧边栏居中(Wordpress 主题)
- jquery - 循环中的 HighCharts Js 图表
- javascript - 如果选中复选框,则触发事件 javascript
- perl - Perl:十进制到 32 位十六进制转换
- python - SCIP - 整体分离
- java - 尝试在空对象引用上调用虚拟方法 GapWorker.remove(RecyclerView)'