假设有一个具有列data (jsonb)的表json_table。一个示例值为
{"a": [{"b":{"c": "xxx", "d": 1}},{"b":{"c": "xxx", "d": 2}}]}我过去常常像下面这样运行SQL查询:
SELECT data
FROM json_table j
WHERE NOT EXISTS (SELECT 1
FROM jsonb_array_elements(j.data#>'{a}') dt
WHERE (dt#>>'{b,d}')::integer IN (2, 4, 6, 9)
);问题是,现在属性d需要有一个双重类型,可以是整数类型,也可以是字符串类型。这意味着前面提到的查询将崩溃,并显示
ERROR: invalid input syntax for integer: "d-string-value"
我想避免创建两个属性d_id和d_name的显而易见的解决方案。
那么,有没有办法查询双重类型的JSONB属性呢?
发布于 2020-03-08 17:15:26
如何改为转换为文本?
WHERE (dt#>>'{b,d}')::text IN ('2', '4', '6', '9')https://stackoverflow.com/questions/60585620
复制相似问题