Use jsonb_populate_record() (or json_populate_record()
for json
)以众所周知的行类型作为目标。您可以使用临时表来注册临时使用的类型(如果您不能使用临时表)existing表或自定义复合类型):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Then:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Or use jsonb_to_record() (or json_to_record()
for json
)并通过调用提供列定义列表:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Or提取并投射每个领域单独:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
这三个人都为json
and jsonb
一样。只需使用相应的函数变体即可。
有关的:
- 具有 JSON 数据类型中的嵌套记录数组的查询组合