避免在CASE语句中使用PostgreSQL类型求值
如果这个列是jsonb,我想选择一个列键值。 如果不是jsonb,我只想选择列 代码如下:避免在CASE语句中使用PostgreSQL类型求值,sql,json,postgresql,types,jsonb,Sql,Json,Postgresql,Types,Jsonb,如果这个列是jsonb,我想选择一个列键值。 如果不是jsonb,我只想选择列 代码如下: SELECT CASE WHEN (pg_typeof(mycolumn)::text LIKE 'jsonb') THEN mycolumn->>'mykey' ELSE mycolumn END FROM mytable; 它不起作用,因为在某种程度上,mycolumn->>mykey'仍然针对非JSONB类型的列进行计算 错误:运
SELECT
CASE WHEN (pg_typeof(mycolumn)::text LIKE 'jsonb')
THEN mycolumn->>'mykey'
ELSE mycolumn
END
FROM mytable;
它不起作用,因为在某种程度上,mycolumn->>mykey'
仍然针对非JSONB类型的列进行计算
错误:运算符不存在:[……]->未知
提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换
是否有方法使PostgreSQL类型检查接受此语句,或者有其他方法可以执行此操作?通常,您可以通过将查询结果强制转换为
文本来执行此操作:
SELECT
CASE WHEN (pg_typeof(mycolumn)::text LIKE 'jsonb')
THEN (mycolumn::text::jsonb)->>'mykey'
ELSE mycolumn::text
END
FROM mytable;
是的,谢谢。顺便说一句,我有一些列不能(例如timestamstz)。