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

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

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

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

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

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

Функция

Описание

Пример(ы)

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, либо конкретное значение типа, с тем же результатом. Чаще всего эти функции применяются к столбцу таблицы или аргументу функции, а не к жестко заданному имени типа, как в примерах.