代码之家  ›  专栏  ›  技术社区  ›  Mateusz Urbański

从jsonb字段数组获取数据

  •  1
  • Mateusz Urbański  · 技术社区  · 7 年前

    我在PostgreSQL数据库中有以下架构:

    CREATE TABLE survey_results (
        id integer NOT NULL,
        raw jsonb DEFAULT '{}'::jsonb,
        created_at timestamp without time zone,
        updated_at timestamp without time zone  
    );
    
    INSERT INTO survey_results (id, raw, created_at, updated_at)
        VALUES (1, '{ "slides": [{"id": "1", "name": "Test", "finished_at": 1517421628092}, {"id": "2", "name": "Test", "finished_at": 1517421894736}]}', now(), now());
    

    我想从中获取数据 raw['slides'] 。我想查询返回 raw['slides'] id raw['slides'] finished_at 。因此,查询结果应如下所示:

    id  finished_at
    1 1517421628092
    2 1517421894736
    

    下面是SQLFIDLE的实验:

    http://sqlfiddle.com/#!17/ae504

    如何在PostgreSQL中执行此操作?

    1 回复  |  直到 7 年前
        1
  •  2
  •   a_horse_with_no_name    7 年前

    您需要取消对数组的测试,然后才能访问每个元素:

    select s.slide ->> 'id' as id,
           s.slide ->> 'finished_at' as finished_at
    from survey_results, jsonb_array_elements(raw -> 'slides') as s (slide)
    

    http://sqlfiddle.com/#!17/ae504/80

    有关更多详细信息,请参阅 JSON Functions and Operators 在手册中。