【问题标题】:cast a jsonb value to varchar in postgresql在 postgresql 中将 jsonb 值转换为 varchar
【发布时间】:2025-12-08 12:00:01
【问题描述】:

我有一个类似的查询

SELECT DISTINCT (value->'Tag') AS tagname 
FROM documents, 
     jsonb_array_elements(documents.Tags)

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

文档表中标签列中的示例数据是

'[{"Tag":"Web 2.0"},{"Tag":"Adobe Creative"},{"Tag":"Suite"}]'

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

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

但它的显示

Not all named parameters have been set:

【问题讨论】:

    标签: sql postgresql jpa


    【解决方案1】:

    不需要强制转换,只需使用->> operator,它返回的值是text

    SELECT DISTINCT value ->> 'Tag' AS tagname 
    FROM documents, 
         jsonb_array_elements(documents.tags);
    

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

    :: 不是转换值的唯一方法(这也是 JPA 所扼杀的)。您也可以使用标准的cast() 运算符:

    SELECT DISTINCT cast(value -> 'Tag' as varchar) AS tagname 
    

    ->> 运算符是这里更好的选择。

    【讨论】: