我有一个名为' months'的JSON数据类型列。在我的mysql数据库中。
这是'月'的样本值。连续:{" 2018Apr":" 2500"," 2018Jun":" 9000"," 2018年5月": " 4000"," enddate":" 2018-06-14T18:30:00.000Z"," startdate":" 2018 -04-26T18:30:00.000Z"}
除了'以外的所有关键字'并且' startdate'可能会有所不同(即“开始日期”和“结束日期”将始终存在于JSON中)这些月份会有所不同(' startdate' enddate'将永远存在于JSON中)。柱。我想运行一个选择查询来获取此列中的所有值,不包括' startdate'并且' enddate'键和它们的值。
即。选择查询的预期输出: - {" 2500"," 9000"," 4000"}
不幸的是,我能得到的最好的是所有键的值,结果是: - {" 2500"," 9000"," 4000"," 2018-06-14T18:30:00.000Z"," 2018-04-26T18:30:00.000Z"}
这是我使用的查询: -
SELECT `months` -> '$.*'
from `Project`
where `pId` ="6d43c24f-b258-4b75-8524-26873c643748"
AND `creationTime` IN (SELECT MAX(`creationTime`) FROM `Project` GROUP BY `id`);
MySql文档包含基于JSON值而非键过滤的信息。非常感谢任何帮助。
答案 0 :(得分:1)
您可以使用startdate
从enddate
删除months
和JSON_REMOVE
个密钥,然后使用JSON_EXTRACT
获取剩余的值:
select json_extract(json_remove(months, '$.startdate', '$.enddate'), '$.*')
from `Project`
where `pId` ="6d43c24f-b258-4b75-8524-26873c643748"
AND `creationTime` IN (SELECT MAX(`creationTime`) FROM `Project` GROUP BY `id`);
应该给予
["2500", "9000", "4000"]