Преобразование целого числа в Enum в PostgreSQL - PullRequest
7 голосов
/ 01 декабря 2009

Я создал пользовательский тип данных enum примерно так:

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

Из внешнего источника данных я получаю целые числа в диапазоне [0,4]. Я хотел бы преобразовать эти целые числа в соответствующие им значения перечисления.

Как я могу это сделать?

Я использую PostgreSQL 8.4.

Ответы [ 3 ]

11 голосов
/ 01 декабря 2009
SELECT (ENUM_RANGE(NULL::bnfunctionstype))[s]
FROM   generate_series(1, 5) s
2 голосов
/ 03 июня 2013

Если у вас есть такое перечисление:

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

Вы можете создать список действительных элементов, таких как:

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)
0 голосов
/ 01 декабря 2009
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
$$;
...