Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免在CASE语句中使用PostgreSQL类型求值_Sql_Json_Postgresql_Types_Jsonb - Fatal编程技术网

避免在CASE语句中使用PostgreSQL类型求值

避免在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类型的列进行计算 错误:运

如果这个列是jsonb,我想选择一个列键值。 如果不是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)。