如何从jsonb列中选择数据?

时间:2017-08-08 08:27:29

标签: json postgresql jsonb

我有一个类型为jsonb的列。此列中的数据如下所示

{
    "random_number1":
    {
        "random_number2":
        {
            "Param1": 2,
            "Param2": 0,
            "Param3": 0,
            "Param4": 6,
            "Param5": 3
        }
    }
}

如果我想要f.e,如何为这个列写select。 " Param3" = 6的所有行? 我尝试了类似的东西

SELECT * FROM table WHERE column->'Param3' @> '6'::jsonb;

1 个答案:

答案 0 :(得分:3)

这取决于您的期望。

获取指定路径的值:

select *
from my_table
where my_col->'random_number1'->'random_number2'->>'Param3' = '6'

获取第三级上任何对象的键Param3的值:

select t.*
from my_table t,
jsonb_each(my_col) as level1(key1, value1),
jsonb_each(value1) as level2(key2, value2)
where jsonb_typeof(my_col) = 'object'
and jsonb_typeof(value1) = 'object'
and value2->>'Param3' = '6';

在第二种情况下,您可能希望使用distinct,因为查询可能会产生重复的行。