【问题标题】:POSTGRES JSONB Select Value from Nested ArrayPOSTGRES JSONB 从嵌套数组中选择值
【发布时间】:2020-01-01 18:21:01
【问题描述】:

我正在尝试从 Postgres 中的以下 JSONB 数组中获得机会等于转售。但我似乎无法弄清楚。

{
    "done": true,
    "size": 106,
    "records": [{
        "Name": "FEF",
        "IsActive": true,
        "attributes": {
            "price": "3",
            "width": "20"
        },
        "Description": null,
        "Opportunity": "Resale"
    }, {
        "Name": "DHQ",
        "IsActive": true,
        "attributes": {
            "price": "300",
            "width": "10000"
        },
        "Description": null,
        "Opportunity": "Resale"
    }]
}
SELECT  salesdata 
FROM public.salesdata 
where salesdata -> 0 ->> '"records":[{"Opportunity":"Resale"}]';

错误:

SQL 错误 [42804]:错误:WHERE 的参数必须是布尔类型,而不是文本类型

【问题讨论】:

  • 我使用的是 12 版的 postgre
  • 你期望的输出是什么?

标签: postgresql jsonb


【解决方案1】:

->> 运算符返回指定元素的内容。如果你想测试一个值的存在,使用包含操作符@>

此外,您拥有的顶级 JSON 不是数组,因此 salesdata -> 0 没有意义。

要测试由键records标识的数组是否包含至少一个具有特定值的键/值对,可以使用:

SELECT salesdata 
FROM public.salesdata 
where salesdata -> 'records' @> '[{"Opportunity":"Resale"}]';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多