Числовые типы
Тип timestamp
Тип timestamp PostgreSQL сочетает функциональные возможности типов date и time. Формат timestamp состоит из даты, за которой следует минимум один пробел, после чего идет время и необязательный часовой пояс.
В этом формате поддерживаются любые сочетания форматов даты и времени, перечисленные в табл. 3.15 и 3.20. Примеры допустимого ввода в формате timestamp приведены в табл. 3.22.
Таблица 3.22. Примеры данных типа timestamp.
Пример | Описание |
---|---|
1980-06-25 11:11-7 | Формат даты ISO-8601 с точностью до минут, часовой пояс PST |
25/06/1980 12:24:11.112 | Европейский формат даты с точностью до микросекунд |
06/25/1980 23:11 | Американский формат даты с точностью до минут в 24-часовом представлении |
25.06.1980 23:11:12 РМ | Немецкий региональный формат даты с точностью до микросекунд и суффиксом РМ |
Внимание
Хотя в PostgreSQL поддерживается синтаксис создания полей или значений типа timestamp without time zone, в PostgreSQL 7.1.2 полученный тип данных все равно содержит информацию о часовом поясе.
Интервальный тип
В стандарте SQL92 определен тип данных interval, представляющий фиксированный промежуток времени. Сам по себе тип interval представляет лишь количественную величину, не связанную с определенным начальным или конечным моментом. Интервалы часто используются в сочетании с типами даты и времени для вычисления новой величины посредством сложения или вычитания. Кроме того, они могут пригодиться для быстрого вычисления точного промежутка между двумя датами или моментами времени, для чего одна величина вычитается из другой.
В PostgreSQL поддерживаются два варианта синтаксиса определения интервалов:
длина единице [ago] длина1 единица1 [. длина2 единица2… ] [ago]
Здесь:
- длина – продолжительность интервала, заданная в виде целого или вещественного (для микросекунд) числа. Интерпретация числа определяется следующим параметром.
- единица – единица, в которой измеряется заданный интервал. Разрешены следующие ключевые слова: second, minute, hour, day, week, month,year, decade, century, millennium. Также допускаются сокращения (любой длины при условии однозначной интерпретации) и формы множественного числа.
- ago – необязательное ключевое слово ago указывает, что описываемый период времени предшествует некоторому моменту, а не следует после него. Ключевое слово ago можно рассматривать как аналог знака минус (-) в типах даты и времени.
В листинге 3.27 приведены примеры объединения типов date и interval. Как видно из листинга, вычитание инвертированного интервала (с ключевым словом ago) эквивалентно прибавлению обычного интервала по аналогии с вычитанием отрицательных чисел.
Листинг 3.27. Операции с интервалами.
booktown=# SELECT date('1980-06-25'); date 1980-06-25 (1 row) booktown=# SELECT interval С 21 years 8 days'); interval 21 years 8 days (1 row) booktown=# SELECT date('1980-06-25') + interval ('21 years 8 days') booktown-# AS spanned_date: spanned_date 2001-07-03 00:00:00-07 (1 row) booktown=# SELECT date ('1980-06-25') – interval ('21 years 8 days ago1) booktown-# AS twice_inverted_interval_date; twice_ nverted_interval_date 2001-07-03 00:00:00-07 (1 row)