0

test表中有这样的记录(metrics列是 jsonb 类型):

id     name      metrics
1      machine1  {"metric1": 50, "metric2": 100}
2      machine2  {"metric1": 31, "metric2": 46}

我想选择指标作为附加列,例如(伪代码):

Select *, json_each(test.metrics) from test;

得到如下结果:

id  name       metric1   metric2 
1   machine1   50        100
2   machine2   31        46

这甚至可能吗?

4

2 回答 2

1

你可以简单地使用->>

演示:db<>小提琴

SELECT
    id,
    name,
    metrics ->> 'metric1' as metric1,
    metrics ->> 'metric2' as metric2
FROM t

请注意,现在metric列的类型为text. 如果你想让它们成为 type integer,你需要另外转换它们:

(metrics ->> 'metric1')::int
于 2021-02-17T11:38:32.210 回答
1

使用->>运算符:

select id, name, 
       metrics ->> 'metric1' as metric1,
       metrics ->> 'metric2' as metric2
from test;
于 2021-02-17T11:37:08.847 回答