将 JSON 数组合并为一个字符串
Merge JSON array to a single string
我有一个名为 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怎么办?
简单聚合成字符串:
SELECT string_agg(txt, ', ') AS all_text
FROM (
SELECT jsonb_array_elements(qn)->>'text' AS txt
FROM templates
WHERE id = 1) sub;
抱歉,无法发表评论。主题启动器需要 tsvector 列。我对名为 article
的文本列有这样的结构,其中包含 json 数据,并且需要在键 text
:
中搜索文本
{"time": "some time_structure", "data": {"blocks": [{"data": {"text": "Some long, long text", "image": "image_url"}}, {"data": {"text": "another long text"}}]}}
我是这样生成 tsvector 字段的:
setweight(to_tsvector('russian'::regconfig, jsonb_path_query_array(article::jsonb, '$.blocks[*].data.text')), 'C')
我有一个名为 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怎么办?
简单聚合成字符串:
SELECT string_agg(txt, ', ') AS all_text
FROM (
SELECT jsonb_array_elements(qn)->>'text' AS txt
FROM templates
WHERE id = 1) sub;
抱歉,无法发表评论。主题启动器需要 tsvector 列。我对名为 article
的文本列有这样的结构,其中包含 json 数据,并且需要在键 text
:
{"time": "some time_structure", "data": {"blocks": [{"data": {"text": "Some long, long text", "image": "image_url"}}, {"data": {"text": "another long text"}}]}}
我是这样生成 tsvector 字段的:
setweight(to_tsvector('russian'::regconfig, jsonb_path_query_array(article::jsonb, '$.blocks[*].data.text')), 'C')