如何根据属性名称在mysql中过滤JSON数据类型?

时间:2018-05-08 13:31:26

标签: mysql json

我有一个名为' 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值而非键过滤的信息。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用startdateenddate删除monthsJSON_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"]