在PostgreSQL

时间:2015-07-10 14:48:12

标签: postgresql casting

我试图在PostgreSQL中将smallint强制转换为布尔值。这不是开箱即用的,例如:

select (1::smallint)::bool;

返回“错误:42846:无法将类型smallint强制转换为布尔值”

我可以使用以下方法解决此问题:

select (1::smallint)::int::bool;

但我想知道是否有一种方法可以定义如何将smallint直接投射到boolean

这样做的原因是我(和我合作的其他人)都有摘要查询,这些查询会将int列从数据库表转换为boolean。我想将此列更改为smallint,但这样做会制止这种逻辑,因为没有从smallint直接转换为boolean。是否可以使用postgres CREATE CAST来定义如何将smallint转换为boolean

2 个答案:

答案 0 :(得分:10)

CREATE OR REPLACE FUNCTION boolean1(i smallint) RETURNS boolean AS $$
    BEGIN
            RETURN (i::smallint)::int::bool;
    END;
$$ LANGUAGE plpgsql;

CREATE CAST (smallint AS boolean) WITH FUNCTION boolean1(smallint) AS ASSIGNMENT;

答案 1 :(得分:0)

我正在尝试:

ALTER TABLE mytable ALTER COLUMN mycol TYPE bool USING mycol::bool;

使用与“ Ispirer SQLWays Migrations”答案相同的方法(将smallint转换为int,然后转换为boolean)有效:

ALTER TABLE mytable ALTER COLUMN mycol TYPE bool USING mycol::int::bool;