轉換的整數枚舉我已創建自定義數據類型枚舉像這樣:PostgreSQL中
create type "bnfunctionstype" as enum (
'normal',
'library',
'import',
'thunk',
'adjustor_thunk'
);
從外部數據源我得到整數的範圍是[0,4]。我想將這些整數轉換爲相應的枚舉值。
我該怎麼做?
我正在使用PostgreSQL 8.4。
轉換的整數枚舉我已創建自定義數據類型枚舉像這樣:PostgreSQL中
create type "bnfunctionstype" as enum (
'normal',
'library',
'import',
'thunk',
'adjustor_thunk'
);
從外部數據源我得到整數的範圍是[0,4]。我想將這些整數轉換爲相應的枚舉值。
我該怎麼做?
我正在使用PostgreSQL 8.4。
SELECT (ENUM_RANGE(NULL::bnfunctionstype))[s]
FROM generate_series(1, 5) s
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
$$;
我需要爲幾個枚舉類型執行此操作,所以我真的很想避免重複所有單個值併爲每個值創建一個存儲過程。 – BuschnicK
如果你有一個這樣的枚舉:
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)
這看起來非常優雅 - 我會在星期一嘗試它(當我回到辦公室時)並相信您的答案... – BuschnicK