如何在postgres中显示哈希数组中的键?

问题描述 投票:1回答:1

我们有一张桌子'书':

id - int
data - text

实际上我们应该将数据保存为jsonb列,但我们已经创建了这个表,并且不打算迁移。

我们可以在需要时将它转换为jsonb。

我的问题是

在数据中我有{"genres":[{"text":"Crime","id": "1"},{"text":"Romance","id": "5"}],"name":"Harry Potter"}

我需要一个选择查询来显示为每本书分隔的逗号类型的所有文本。

我怎样才能做到这一点?

我试过这个,

select data::json -> 'genres'  as genres
from books
where data::json -> 'genres'  is not NULL
limit 1;

然而,这也显示了id,它还显示方括号。

sql postgresql postgresql-10
1个回答
2
投票

使用json_array_elements

select string_agg(j->>'text',',')  from books
cross join lateral json_array_elements(data::json->'genres') as j

Demo

如果您想要每本书,请添加group by id或任何唯一标识书籍的内容。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.