在MySQL中实际存储json串的非json类型字段,查询时视为json类型字段,从而获取其中部分属性值

在遗留的系统,可以存在这样的场景:
非json类型字段,存储着json串。我们在select的时候,期望获取该字段中的部分属性值
例如:

CREATE TABLE IF NOT EXISTS `good` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `histories` LONGTEXT NULL,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;

我们的good表中histories是一个LONGTEXT类型,非json类型,但它里面存在的json串。例如:

[{"status": "Start", "createdTime": "2021-09-01 11:44:17"},{"status": "End", "createdTime": "2021-09-01 11:44:17"}]

格式化后:

[{
    "status": "Start",
    "createdTime": "2021-09-01 11:44:17"
}, {
    "status": "End",
    "createdTime": "2021-09-01 11:44:17"
}]
  • 如果我们需要获取json数组中的第一个对象,我们可以采用如下的sql。
select id,
       JSON_EXTRACT(histories, '$[0]')
from good;
  • 如果需要获取json数组中的第二个对象中的status属性的值,可以采用如下的sql。
select id,
       JSON_EXTRACT(histories -> '$[1]', '$.status')
from good;

你可能感兴趣的:(在MySQL中实际存储json串的非json类型字段,查询时视为json类型字段,从而获取其中部分属性值)