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

Для типов перечислений (описанных в Разделе 8.7) предусмотрено несколько функций, которые позволяют сделать код чище, не «зашивая» в нём конкретные значения перечисления. Эти функции перечислены в Таблице 9.32. В этих примерах подразумевается, что перечисление создано так:

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

Таблица 9.32. Функции для перечислений

ФункцияОписаниеПримерРезультат примера
enum_first(anyenum)Возвращает первое значение заданного перечисленияenum_first(null::rainbow)red
enum_last(anyenum)Возвращает последнее значение заданного перечисленияenum_last(null::rainbow)purple
enum_range(anyenum)Возвращает все значения заданного перечисления в упорядоченном массивеenum_range(null::rainbow){red,orange,yellow,green,blue,purple}
enum_range(anyenum, anyenum)Возвращает набор значений, лежащих между двумя заданными, в виде упорядоченного массива. Эти значения должны принадлежать одному перечислению. Если первый параметр равен 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 или любое другое значение типа. Обычно эти функции применяются к столбцам таблицы или аргументам внешних функций, а не к предопределённым типам, как показано в этих примерах.