2015-07-10 4 views
5

में बूलियन के लिए छोटे से कास्टिंग को पोस्ट करना मैं PostgreSQL में एक बूलियन के लिए एक छोटा सा कलाकार डालने की कोशिश कर रहा हूं। इस बॉक्स से बाहर काम नहीं करता है, उदाहरण के लिए:PostgreSQL

select (1::smallint)::bool; 

रिटर्न

मैं इस का उपयोग कर ठीक कर सकते हैं "त्रुटि:: 42,846 बूलियन के प्रकार SMALLINT डाली नहीं कर सकते":

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

लेकिन मैं सोच रहा हूं कि क्या कोई तरीका है कि मैं smallint को boolean पर कैसे डालना है परिभाषित कर सकता हूं?

इसका कारण यह है कि मैं (और जिन लोगों के साथ मैं काम करता हूं) में सारांश प्रश्न हैं जो डेटाबेस तालिका से पर int कॉलम डाले हैं। मैं इस कॉलम को smallint पर बदलना चाहता हूं, लेकिन ऐसा करने से इस तर्क को तोड़ दिया जाएगा क्योंकि smallint से boolean तक कोई प्रत्यक्ष कलाकार नहीं है। smallint को boolean पर कैसे डालना है, यह परिभाषित करने के लिए पोस्टग्रेज़ CREATE CAST का उपयोग करना संभव है?

उत्तर

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