条件转换列数据类型

时间:2018-05-24 14:25:13

标签: sql postgresql types casting

我有子查询,它返回varchar列,在某些情况下,此列仅包含数值,在这种情况下,我需要将此列强制转换为bigint,我试图使用CAST(case ...)构造,但是CASE是一个表达式,它返回单个结果,而不管它始终需要产生相同数据类型的路径(或者可以隐式转换为相同的数据类型)。是否有任何棘手的方法来改变列数据类型,具体取决于PostgreSQL中的条件?谷歌不能帮助我((

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

1 个答案:

答案 0 :(得分:0)

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

SQL查询返回一组固定的列,其名称和类型是固定的。因此,先验您想要做的事情并不适合SQL。

您可以通过创建自己的类型来解决这个问题,即大整数或字符串。您可以将值存储为JSON。但那些是解决方法。 SQL查询本身实际上是返回一个" type"每列;这就是SQL的工作原理。