在PostgreSQL中将smallint转换为布尔
我试图在PostgreSQL中将smallint转换为布尔值。这不是现成的,例如:在PostgreSQL中将smallint转换为布尔,postgresql,casting,Postgresql,Casting,我试图在PostgreSQL中将smallint转换为布尔值。这不是现成的,例如: select (1::smallint)::bool; 返回“错误:42846:无法将类型smallint转换为布尔” 我可以使用以下方法解决此问题: select (1::smallint)::int::bool; 但我想知道是否有一种方法可以定义如何将smallint直接转换为boolean CREATE OR REPLACE FUNCTION boolean1(i smallint) RETURNS b
select (1::smallint)::bool;
返回“错误:42846:无法将类型smallint转换为布尔”
我可以使用以下方法解决此问题:
select (1::smallint)::int::bool;
但我想知道是否有一种方法可以定义如何将smallint
直接转换为boolean
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;
这是因为我(以及我所使用的其他人)有一个摘要查询,它将数据库表中的int
列转换为boolean
。我想将此列更改为smallint
,但这样做会中断此逻辑,因为没有将smallint
直接转换为boolean
。是否可以使用postgresCREATE CAST
定义如何将smallint
转换为boolean
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;
ALTER TABLE mytable ALTER COLUMN mycol TYPE bool USING mycol::bool;
使用与“Ispirer SQLWays Migrations”答案相同的方法(将smallint转换为int,然后转换为boolean)有效:
PostgreSQL本机不支持此转换的原因是什么?@usta,因为创建表时必须创建布尔类型的列,而不是在创建表后it@Acuna我不知道你说的是什么意思。这里没有涉及任何列或表,只有一个类型为
smallint
的值,我们希望将其转换为布尔值。似乎是非常简单的东西,需要开箱即用。@usta但是Postgres有特殊的boolean
类型来存储bool,为什么需要将int转换为bool?Int代表Int,bool代表bool,不是吗?@Acuna和text
代表文本,numeric
代表数字,但在很多情况下,需要将一种类型转换为另一种类型。如果每样东西都有它合适的类型,为什么还要有石膏呢?这是几年前的事了,所以我不记得这个确切的需求是在什么情况下出现的,但它确实出现了,我必须解决这个问题,我假设的OP也是如此。