2009-12-01 10 views
7

में Enum के लिए एक पूर्णांक परिवर्तित मैं बहुत की तरह एक कस्टम डेटा प्रकार enum बनाया है। मैं इन integers को उनके संबंधित enum मानों में कनवर्ट करना चाहता हूं।PostgreSQL

मैं यह कैसे कर सकता हूं?

मैं PostgreSQL 8.4 का उपयोग कर रहा हूं।

उत्तर

10
SELECT (ENUM_RANGE(NULL::bnfunctionstype))[s] 
FROM generate_series(1, 5) s 
+1

यह बेहद सुरुचिपूर्ण दिखता है - मैं सोमवार को कोशिश करूंगा (जब मैं कार्यालय में वापस आऊंगा) और आपको जवाब के लिए श्रेय देता हूं ... – BuschnicK

0
create function bnfunctionstype_from_number(int) 
    returns bnfunctionstype 
    immutable strict language sql as 
$$ 
    select case ? 
     when 0 then 'normal' 
     when 1 then 'library' 
     when 2 then 'import' 
     when 3 then 'thunk' 
     when 4 then 'adjustor_thunk' 
     else null 
    end 
$$; 
+0

मुझे कई enum प्रकारों के लिए ऐसा करने की ज़रूरत है, इसलिए मैं वास्तव में चाहूंगा सभी व्यक्तिगत मूल्यों को दोहराने से बचें और प्रत्येक के लिए एक संग्रहित प्रक्रिया तैयार करें। – BuschnicK

2

आप इस तरह एक enum है:

SELECT i, (enum_range(NULL::payment_status))[i] 
    FROM generate_series(1, array_length(enum_range(NULL::payment_status), 1)) i 

कौन देता है::

i | enum_range 
---+------------ 
1 | preview 
2 | pending 
3 | paid 
4 | reviewing 
5 | confirmed 
6 | cancelled 
(6 rows) 

CREATE TYPE payment_status AS ENUM ('preview', 'pending', 'paid', 
            'reviewing', 'confirmed', 'cancelled'); 

आप एक इस तरह वैध मदों की सूची बना सकते हैं