PostgreSQL 列挙型から範囲を指定して列挙値を取得する

PostgreSQL 列挙型から範囲を指定して列挙値を取得する

PostgreSQLで、列挙型から範囲を指定して列挙値を取得する手順を記述してます。「enum_range」に開始する列挙値と終了する列挙値を指定することで可能です。実行結果はpgadmin上で確認してます。

環境

  • OS CentOS Stream release 9
  • PostgreSQL 15.1
  • pgadmin4 6.16

範囲を指定して列挙値を取得

範囲を指定して列挙値を取得するには、「enum_range」を使用します。

enum_range(開始列挙値:列挙型,終了列挙値:列挙型);

実際に、列挙型「enumtest」を作成して実行してみます。

CREATE TYPE enumtest AS ENUM (
    'aaa',
    'bbb',
    'ccc',
    'ddd',
    'eee'
);

取得してみます。

SELECT enum_range('bbb'::enumtest,'ddd'::enumtest);

実行結果

存在しない値を指定するとエラーとなります。

SELECT enum_range('bbb'::enumtest,'fff'::enumtest);

ERROR:  列挙型enumtestの不正な入力構文: "fff"
LINE 1: SELECT enum_range('bbb'::enumtest,'fff'::enumtest);
                                          ^
SQL 状態: 22P02
文字: 35

実行結果

開始位置と終了位置を逆にすると空の値が返ります。

SELECT enum_range('ddd'::enumtest,'bbb'::enumtest);

実行結果

nullを指定

取得する値をの開始位置か終了位置に「null」を指定すると、最初か最後まで取得されます。

SELECT 
enum_range(null::enumtest,'ddd'::enumtest),
enum_range('bbb'::enumtest,null::enumtest);

実行結果

「null」同士を指定すると全て取得されます。

SELECT 
enum_range(null::enumtest),
enum_range(null::enumtest,null::enumtest);

実行結果