如果该列是jsonb,我想选择一个列键值。
如果不是jsonb,我只想选择列。
代码如下:

SELECT
    CASE WHEN (pg_typeof(mycolumn)::text LIKE 'jsonb')
        THEN mycolumn->>'mykey'
        ELSE mycolumn
    END
FROM mytable;

它不起作用,因为无论如何mycolumn->>'mykey'仍然是针对不属于JSONB类型的列计算的。
错误:运算符不存在:[……>未知
提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。
有没有办法让PostgreSQL type check接受这个语句,或者有没有别的办法?

最佳答案

通常,您可以将查询结果强制转换为text

SELECT
    CASE WHEN (pg_typeof(mycolumn)::text LIKE 'jsonb')
        THEN (mycolumn::text::jsonb)->>'mykey'
        ELSE mycolumn::text
    END
FROM mytable;

关于sql - 在CASE语句中避免PostgreSQL类型评估,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53943835/

10-11 05:30