如果该列是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/