2009-12-01 9 views
7

で列挙型の整数の変換私はそうのようなカスタムデータ型の列挙型を作成しました:PostgreSQLの

create type "bnfunctionstype" as enum ( 
    'normal', 
    'library', 
    'import', 
    'thunk', 
    'adjustor_thunk' 
); 

私は範囲[0,4]の整数を取得し、外部データソースから。これらの整数を対応する列挙型の値に変換したいと思います。

どうすればいいですか?

私は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

私はいくつかの列挙型のためにこれを行う必要があります。個々の値をすべて繰り返し、それぞれのストアドプロシージャを作成しないでください。 – BuschnicK

2

あなたはこのような列挙している場合:

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');