2009-12-01 7 views
7

Konvertieren Ich habe einen benutzerdefinierten Datentyp Enum wie so erstellt. Ich möchte diese ganzen Zahlen in ihre entsprechenden Enum-Werte konvertieren.einen Integer zu Enum in PostgreSQL

Wie kann ich das tun?

Ich benutze PostgreSQL 8.4.

Antwort

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

Das sieht sehr elegant aus - ich werde es am Montag versuchen (wenn ich wieder im Büro bin) und Ihnen eine Antwort geben ... – 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

Ich muss das für mehrere Enum-Typen machen, also würde ich es wirklich gerne tun Vermeiden Sie es, alle einzelnen Werte zu wiederholen und für jede eine gespeicherte Prozedur zu erstellen. – BuschnicK

2

Wenn Sie eine Enumeration wie folgt aus:

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

Sie eine Liste der gültigen Elemente wie diese erstellen:

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

Welche gibt:

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