Функции поддержки перечислений

Для перечислимых типов (описанных в разделе Перечислимые типы), существует несколько функций, позволяющих программировать чище, без жесткого кодирования конкретных значений перечислимого типа. Эти функции приведены в Таблице 34. В примерах предполагается, что перечислимый тип создан как:

CREATE TYPE rainbow AS ENUM (’red’, ’orange’, ’yellow’, ’green’, ’blue’, ’purple’);

Таблица 34. Функции поддержки перечислений

Функция

Описание

Пример(ы)

enum_first ( anyenum ) → anyenum

Возвращает первое значение входных данных перечислимого типа.

enum_first(null::rainbow) → red

enum_last ( anyenum ) → anyenum

Возвращает последнее значение входных данных перечислимого типа.

enum_last(null::rainbow) → purple

enum_range ( anyenum ) → anyarray

Возвращает все значения входных данных перечислимого типа в упорядоченном массиве.

enum_range(null::rainbow) → {red,orange,yellow,​green,blue,purple}

enum_range ( anyenum, anyenum ) → anyarray

Возвращает диапазон между двумя заданными значениями перечисления в виде упорядоченного массива. Значения должны быть принадлежать одному перечислимому типу. Если первый параметр имеет значение NULL, результат будет начинаться с первого значения перечислимого типа. Если второй параметр имеет значение NULL, результат будет заканчиваться последним значением перечислимого типа.

enum_range('orange'::rainbow, 'green'::rainbow) → {orange,yellow,green}
enum_range(NULL, 'green'::rainbow) → {red,orange,​yellow,green}
enum_range('orange'::rainbow, NULL) → {orange,yellow,green,​blue,purple}

Обратите внимание, что за исключением формы enum_range с двумя аргументами, эти функции игнорируют конкретное переданное им значение; их интересует только его объявленный тип данных. Может быть передан либо NULL, либо конкретное значение этого типа, при этом результат будет одинаковым. Как правило, эти функции применяются к столбцу таблицы или аргументу функции, а не к жестко закодированному имени типа, как показано в примерах.