将JSON数组合并为单个字符串

mec*_*ech 5 postgresql json jsonb

我有一个qn形式为JSONB类型的字段:

[{id: 1, text: 'A'}, {id: 2, text: 'B'}]

要获取所有文本,我可以这样做:

SELECT jsonb_array_elements(qn)->>'text' from templates where id=1

我的问题是,如何合并成这样的单个字符串:

A, B

如果该字段不是JSONB,则可以使用以下命令轻松完成:

SELECT array_to_string(ARRAY(select title from templates), ', ');

如果该字段为JSONB,该怎么办?

Pat*_*ick 5

只需聚合为一个字符串:

SELECT string_agg(txt, ', ') AS all_text
FROM (
  SELECT jsonb_array_elements(qn)->>'text' AS txt
  FROM templates
  WHERE id = 1) sub;
Run Code Online (Sandbox Code Playgroud)