在PostgreSQL中选择jsonb列的值

A A*_*A A 7 postgresql jsonb

我有一个表'Documents',其中有一个'Tags'列,'jsonb'数据类型.标签列中的示例数据

 [{"Tag": "Social Media"}, {"Tag": "Adobe Creative"}]
 [{"Tag": "Interactive"}]
 [{"Tag": "Web 2.0"}, {"Tag": "Adobe Creative"},{"Tag": "Suite"}]
Run Code Online (Sandbox Code Playgroud)

我需要得到"标签"的不同值

 Social Media 
 Adobe Creative
 Interactive
 Web 2.0
 Suite
Run Code Online (Sandbox Code Playgroud)

我是PostgreSQL的新手.

Moh*_*ood 10

您还可以使用以下代码片段。

SELECT DISTINCT
  Tags::json->'Tag'
FROM Documents;
Run Code Online (Sandbox Code Playgroud)


epo*_*pox 8

自 Postgres 9.6+ 起

SELECT DISTINCT
  Tags->>'Tag'
FROM Documents;
Run Code Online (Sandbox Code Playgroud)


Pat*_*ick 7

最短的版本是:

SELECT DISTINCT value->'Tag' AS tag
FROM Documents, jsonb_array_elements(Documents.Tags);
Run Code Online (Sandbox Code Playgroud)

jsonb_array_elements()函数将JSONB数组取消嵌套为一组具有单个列的行,这些列称为“值”。它在Documents表上使用隐式“横向连接” 。

这为您提供了不同的标签作为jsonb值。如果希望它们作为text值,请使用->>运算符代替->