2015-07-10 253 views
5

我想在PostgreSQL中将smallint转换为布尔值。这不箱子的工作,例如:在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

回答

6
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; 
+0

什么原因PostgreSQL本身不支持这种转换? – usta