暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL enum_range() 函数

原创 游湖 2023-02-15
378

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_start 和 enum_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}
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论