Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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
Sql 列数据类型的条件转换_Sql_Postgresql_Types_Casting - Fatal编程技术网

Sql 列数据类型的条件转换

Sql 列数据类型的条件转换,sql,postgresql,types,casting,Sql,Postgresql,Types,Casting,我有一个子查询,它返回我varchar列,在某些情况下,该列只包含数值,在这种情况下,我需要将该列强制转换为bigint,我尝试使用强制转换(case…)构造,但case是一个返回单个结果的表达式,不管它需要的路径如何,都会导致相同的数据类型(或隐式转换为相同的数据类型)。是否有任何棘手的方法根据PostgreSQL中的条件更改列数据类型?google帮不了我(( 真的没有办法做你想做的事 SQL查询返回一组固定的列,其名称和类型是固定的。因此,您要执行的操作在SQL中并不合适 您可以通过创建自

我有一个子查询,它返回我varchar列,在某些情况下,该列只包含数值,在这种情况下,我需要将该列强制转换为bigint,我尝试使用强制转换(case…)构造,但case是一个返回单个结果的表达式,不管它需要的路径如何,都会导致相同的数据类型(或隐式转换为相同的数据类型)。是否有任何棘手的方法根据PostgreSQL中的条件更改列数据类型?google帮不了我((


真的没有办法做你想做的事

SQL查询返回一组固定的列,其名称和类型是固定的。因此,您要执行的操作在SQL中并不合适


您可以通过创建自己的类型(大整数或字符串)来解决此问题。您可以将值存储为JSON。但这些都是解决方法。SQL查询本身实际上返回一个“类型”对于每一列,SQL就是这样工作的。

如果没有一个简单的例子,很难理解您的意思。您可以添加一个简单的查询来演示您的情况吗?一个列只能有一个数据类型。同一列不能在不同的行中有不同的类型。@a_horse_没有名称不能(理论上)比如说,所有值都可以是varchar或integer,因此生成的查询列类型可以在运行时更改?@Impaler依赖于数据库列模块只能包含数值或非数值
SELECT 
        prefix, 
        module, 
        postfix,
        id,
        created_date
        FROM 
           (SELECT 
           s."prefix", 
           coalesce(m."replica", to_char(CAST((m."id_type" * 10 ^ 12) AS bigint) + m."id", 'FM0000000000000000')) "module", 
           s."postfix", 
           s."id",  
           s."created_date" 
           FROM some_subquery