2015-07-10 9 views
5

Ich versuche, eine Smallint auf einen Boolean in PostgreSQL zu werfen. Das funktioniert nicht, aus der Box, zum Beispiel:Casting von Smallint zu Boolean in PostgreSQL

select (1::smallint)::bool; 

returns "FEHLER: 42846: nicht Typ smallint werfen kann boolean"

ich dies mit beheben kann:

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

aber Ich frage mich, ob es eine Möglichkeit gibt, wie ich smallint direkt zu boolean zu übertragen kann?

Der Grund dafür ist, dass ich (und andere, mit denen ich arbeite) über Sammelabfragen verfügen, die eine int-Spalte aus einer Datenbanktabelle in boolean umwandeln. Ich möchte diese Spalte zu smallint ändern, aber dies würde diese Logik bremsen, weil es keinen direkten Wurf von smallint zu boolean gibt. Ist es möglich, die postgres CREATE CAST zu verwenden, um zu definieren, wie man eine smallint zu einer boolean?

Antwort

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

Aus welchem ​​Grund unterstützt PostgreSQL diese Konvertierung nicht nativ? – usta