美文网首页Java简友广场
在MySQL中实际存储json串的非json类型字段,查询时视为

在MySQL中实际存储json串的非json类型字段,查询时视为

作者: 西安法律咨询服务平台与程序员 | 来源:发表于2021-11-18 16:03 被阅读0次

    在遗留的系统,可以存在这样的场景:
    非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类型字段,查询时视为

        本文链接:https://www.haomeiwen.com/subject/fradtrtx.html