我试图在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
?
答案 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;