PostgreSQL enum_range() 函数使用指南

PostgreSQL enum_range() 函数返回由参数指定的枚举类型的所有枚举值,或者指定的范围内的枚举值。

enum_range() 语法

这里是 PostgreSQL enum_range() 函数的语法:

enum_range(enum_value ANYENUM) -> ARRAY

或者

enum_range(enum_range_start ANYENUM, enum_range_end ANYENUM) -> ARRAY

参数

enum_value
必需的。 一个枚举值。 通常,传入一个 null 值。
enum_range_start
必需的。 一个枚举值。 枚举范围的起始值。 它必须和 enum_range_end 是相同的枚举类型。
enum_range_end
必需的。 一个枚举值。 枚举范围的结束值。 它必须和 enum_range_start 是相同的枚举类型。

返回值

带有一个参数的 PostgreSQL enum_range() 函数返回指定枚举类型的所有的枚举值。

带有两个参数的 PostgreSQL enum_range() 函数返回由 enum_range_startenum_range_end 确定的范围内的所有的枚举值。如果第一个参数 enum_range_start 为 NULL,范围将从第一个枚举值开始。如果第二个参数 enum_range_end 为 NULL,范围将以最后一个枚举值结束。如果两个参数都为 NULL,enum_range() 函数将返回所有的枚举值。

enum_range() 示例

首先,让我们使用 CREATE TYPE 语句创建一个枚举类型 my_number

CREATE TYPE my_number AS ENUM (
    'one',
    'two',
    'three',
    'four',
    'five',
    'six',
    'seven',
    'eight',
    'nine',
    'ten'
);

然后,让我们使用 PostgreSQL enum_range() 函数返回 my_number 中的所有的枚举值:

SELECT enum_range(null::my_number);
                     enum_range
----------------------------------------------------
 {one,two,three,four,five,six,seven,eight,nine,ten}

这里,我们为 enum_range() 函数提供了一个 my_number 类型的 null 参数 null::my_number,并且 enum_range() 函数返回了 my_number 中的所有的枚举值。

注意,您不能省略 null::my_number 中的 ::my_number,否则 PostgreSQL 将会给出一个错误。

当然,您也可以传入任何一个 my_number 类型的枚举值,比如:

SELECT
    enum_range('one'::my_number),
    enum_range('two'::my_number),
    enum_range('three'::my_number),
    enum_range('four'::my_number),
    enum_range('five'::my_number),
    enum_range('six'::my_number),
    enum_range('seven'::my_number),
    enum_range('eight'::my_number),
    enum_range('nine'::my_number),
    enum_range('ten'::my_number);
-[ RECORD 1 ]--------------------------------------------------
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}
enum_range | {one,two,three,four,five,six,seven,eight,nine,ten}

这里,我们传入了所有的 my_number 类型的枚举值,enum_range() 函数都返回了 my_number 中的所有的枚举值。

我们可以使用带有两个参数的 enum_range() 函数获取某个范围内的枚举值,比如:

SELECT enum_range('two'::my_number, 'six'::my_number);
        enum_range
---------------------------
 {two,three,four,five,six}

如果第一个参数为 NULL,范围将从第一个枚举值开始,比如:

SELECT enum_range(null::my_number, 'six'::my_number);
          enum_range
-------------------------------
 {one,two,three,four,five,six}

如果第二个参数为 NULL,范围将以最后一个枚举值结束,比如:

SELECT enum_range('two'::my_number, null::my_number);
                   enum_range
------------------------------------------------
 {two,three,four,five,six,seven,eight,nine,ten}

如果两个参数都为 NULL,enum_range() 函数将返回所有的枚举值,比如:

SELECT enum_range(null::my_number, null::my_number);
                     enum_range
----------------------------------------------------
 {one,two,three,four,five,six,seven,eight,nine,ten}