在 postgresql 中将 jsonb 值转换为 varchar

A A*_*A A 3 sql postgresql jpa

我有一个类似的查询

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

所以标记名是一个 jsonb 值。我需要将该标记名转换为 varchar。我怎么做那个演员?

文档表中标签列中的样本数据是

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

我正在研究 java jpa。我尝试了本机查询

Query query = this.em.createNativeQuery(
            "select distinct (value->'Tag')::varchar as tags from documents, jsonb_array_elements(documents.Tags)");
Run Code Online (Sandbox Code Playgroud)

但它的显示

Not all named parameters have been set:
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

不需要强制转换,只需使用返回值的->>运算符text

SELECT DISTINCT value ->> 'Tag' AS tagname 
FROM documents, 
     jsonb_array_elements(documents.tags);
Run Code Online (Sandbox Code Playgroud)

因为有一天你可能需要一个不同的演员:

::不是投射值的唯一方法(这就是 JPA 所窒息的)。您还可以使用标准cast()运算符:

SELECT DISTINCT cast(value -> 'Tag' as varchar) AS tagname 
Run Code Online (Sandbox Code Playgroud)

但这里的->>运营商是更好的选择。