PostgreSQL - Функции и операторы ДАТА / ВРЕМЯ

Мы обсуждали типы данных Date / Time в главе Типы данных . Теперь давайте посмотрим на операторы даты и времени и функции.

В следующей таблице перечислено поведение основных арифметических операторов -

Оператор пример Результат
+ дата '2001-09-28' + целое число '7' дата '2001-10-05'
+ дата '2001-09-28' + интервал '1 час' отметка времени '2001-09-28 01:00:00'
+ дата '2001-09-28' + время '03: 00 ' отметка времени '2001-09-28 03:00:00'
+ интервал «1 день» + интервал «1 час» интервал '1 день 01:00:00'
+ отметка времени '2001-09-28 01:00' + интервал '23 часа' отметка времени '2001-09-29 00:00:00'
+ время '01: 00 '+ интервал' 3 часа ' время '04: 00: 00 '
- - интервал 23 часа интервал '-23: 00: 00'
- дата '2001-10-01' - дата '2001-09-28' целое число '3' (дни)
- дата '2001-10-01' - целое '7' дата '2001-09-24'
- дата '2001-09-28' - интервал '1 час' отметка времени '2001-09-27 23:00:00'
- время '05: 00 '- время '03: 00' интервал '02: 00: 00 '
- время '05: 00 '- интервал' 2 часа ' время '03: 00: 00 '
- отметка времени '2001-09-28 23:00' - интервал '23 часа' отметка времени '2001-09-28 00:00:00'
- интервал '1 день' - интервал '1 час' интервал '1 день -01: 00: 00'
- отметка времени '2001-09-29 03:00' - отметка времени '2001-09-27 12:00' интервал '1 день 15:00:00'
* 900 * интервал '1 секунда' интервал '00: 15: 00 '
* 21 * интервал '1 день' интервал 21 день
* двойная точность '3,5' * интервал '1 час' интервал '03: 30: 00 '
/ интервал '1 час' / двойная точность '1,5' интервал '00: 40: 00 '

Ниже приводится список всех важных доступных функций, связанных с датой и временем.

С. Нет. Описание функции
1 ВОЗРАСТ()

Вычесть аргументы

2 ТЕКУЩАЯ ДАТА / ВРЕМЯ ()

Текущая дата и время

3 DATE_PART ()

Получить подполе (эквивалент извлечения)

4 ВЫДЕРЖКА ()

Получить подполе

5 ISFINITE ()

Проверка на конечную дату, время и интервал (не +/- бесконечность)

6 ОБОСНОВАТЬ

Отрегулируйте интервал

ВОЗРАСТ (отметка времени, отметка времени), ВОЗРАСТ (отметка времени)

С. Нет. Описание функции
1

AGE(timestamp, timestamp)

Когда вызывается с формой TIMESTAMP второго аргумента, AGE () вычитает аргументы, производя «символический» результат, который использует годы и месяцы и имеет тип INTERVAL.

2

AGE(timestamp)

Когда вызывается только с TIMESTAMP в качестве аргумента, AGE () вычитает из current_date (в полночь).

Пример функции AGE (отметка времени, отметка времени):

testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');

Приведенный выше оператор PostgreSQL даст следующий результат:

age
-------------------------
 43 years 9 mons 27 days

Пример функции AGE (отметка времени):

testdb=# select age(timestamp '1957-06-13');

Приведенный выше оператор PostgreSQL даст следующий результат:

age
--------------------------
 55 years 10 mons 22 days

ТЕКУЩАЯ ДАТА / ВРЕМЯ ()

PostgreSQL предоставляет ряд функций, возвращающих значения, относящиеся к текущей дате и времени. Ниже приведены некоторые функции -

С. Нет. Описание функции
1

CURRENT_DATE

Показывает текущую дату.

2

CURRENT_TIME

Предоставляет значения с часовым поясом.

3

CURRENT_TIMESTAMP

Предоставляет значения с часовым поясом.

4

CURRENT_TIME(precision)

Необязательно принимает параметр точности, который приводит к округлению результата до числа дробных знаков в поле секунд.

5

CURRENT_TIMESTAMP(precision)

Необязательно принимает параметр точности, который приводит к округлению результата до числа дробных знаков в поле секунд.

6

LOCALTIME

Предоставляет значения без часового пояса.

7

LOCALTIMESTAMP

Предоставляет значения без часового пояса.

8

LOCALTIME(precision)

Необязательно принимает параметр точности, который приводит к округлению результата до числа дробных знаков в поле секунд.

9

LOCALTIMESTAMP(precision)

Необязательно принимает параметр точности, который приводит к округлению результата до числа дробных знаков в поле секунд.

Примеры использования функций из таблицы выше -

testdb=# SELECT CURRENT_TIME;
       timetz
--------------------
 08:01:34.656+05:30
(1 row)


testdb=# SELECT CURRENT_DATE;
    date
------------
 2013-05-05
(1 row)


testdb=# SELECT CURRENT_TIMESTAMP;
              now
-------------------------------
 2013-05-05 08:01:45.375+05:30
(1 row)


testdb=# SELECT CURRENT_TIMESTAMP(2);
         timestamptz
------------------------------
 2013-05-05 08:01:50.89+05:30
(1 row)


testdb=# SELECT LOCALTIMESTAMP;
       timestamp
------------------------
 2013-05-05 08:01:55.75
(1 row)

PostgreSQL также предоставляет функции, которые возвращают время начала текущего оператора, а также фактическое текущее время в момент вызова функции. Эти функции -

С. Нет. Описание функции
1

transaction_timestamp()

Он эквивалентен CURRENT_TIMESTAMP, но назван так, чтобы четко отражать то, что он возвращает.

2

statement_timestamp()

Возвращает время начала текущего оператора.

3

clock_timestamp()

Он возвращает фактическое текущее время, поэтому его значение изменяется даже в пределах одной команды SQL.

4

timeofday()

Он возвращает фактическое текущее время, но в виде отформатированной текстовой строки, а не в виде отметки времени со значением часового пояса.

5

now()

Это традиционный PostgreSQL, эквивалент transaction_timestamp ().

DATE_PART (текст, отметка времени), DATE_PART (текст, интервал), DATE_TRUNC (текст, отметка времени)

С. Нет. Описание функции
1

DATE_PART('field', source)

Эти функции получают подполя. Параметр поля должен быть строковым значением, а не именем.

Допустимые имена полей: век, день, декада, доу, дой, эпоха, час, isodow, isoyear, микросекунды, тысячелетие, миллисекунды, минута, месяц, квартал, секунда, часовой пояс, timezone_hour, timezone_minute, week, год.

2

DATE_TRUNC('field', source)

Эта функция концептуально аналогична функции усечения для чисел. source - это выражение значения типа timestamp или interval. поле выбирает, с какой точностью усечь входное значение. Возвращаемое значение имеет тип timestamp или interval .

Допустимые значения для поля : микросекунды, миллисекунды, секунда, минута, час, день, неделя, месяц, квартал, год, десятилетие, век, тысячелетие.

Ниже приведены примеры функций DATE_PART ( 'поле' , источник):

testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
 date_part
-----------
        16
(1 row)


testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
 date_part
-----------
         4
(1 row)

Ниже приведены примеры функций DATE_TRUNC ( 'поле' , источник):

testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
     date_trunc
---------------------
 2001-02-16 20:00:00
(1 row)


testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
     date_trunc
---------------------
 2001-01-01 00:00:00
(1 row)

EXTRACT (поле из метки времени), EXTRACT (поле из интервала)

В EXTRACT(field FROM source)функция извлекает подполя, такие как год или час, из значений даты / времени. Источник должен быть выражением значения типа метки времени, времени или интервала . Поле является идентификатором или строка , которая выбирает какое поле извлечь из исходного значения. Функция EXTRACT возвращает значения типа двойной точности .

Ниже приведены допустимые имена полей (аналогичные именам полей функции DATE_PART): век, день, десятилетие, dow, doy, эпоха, час, isodow, isoyear, микросекунды, миллениум, миллисекунды, минута, месяц, квартал, секунда, часовой пояс, timezone_hour. , timezone_minute, неделя, год.

Ниже приведены примеры функций EXTRACT ( 'поле' , источник):

testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
 date_part
-----------
        20
(1 row)


testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
 date_part
-----------
        16
(1 row)

ISFINITE (дата), ISFINITE (отметка времени), ISFINITE (интервал)

С. Нет. Описание функции
1

ISFINITE(date)

Тесты на конечную дату.

2

ISFINITE(timestamp)

Тесты на конечную отметку времени.

3

ISFINITE(interval)

Тесты на конечный интервал.

Ниже приведены примеры функций ISFINITE () -

testdb=# SELECT isfinite(date '2001-02-16');
 isfinite
----------
 t
(1 row)


testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
 isfinite
----------
 t
(1 row)


testdb=# SELECT isfinite(interval '4 hours');
 isfinite
----------
 t
(1 row)

JUSTIFY_DAYS (интервал), JUSTIFY_HOURS (интервал), JUSTIFY_INTERVAL (интервал)

С. Нет. Описание функции
1

JUSTIFY_DAYS(interval)

Регулирует интервал таким образом, чтобы 30-дневные периоды представлялись в виде месяцев. Вернутьinterval тип

2

JUSTIFY_HOURS(interval)

Регулирует интервал таким образом, чтобы 24-часовые периоды времени представлялись в днях. Вернутьinterval тип

3

JUSTIFY_INTERVAL(interval)

Регулирует интервал с помощью JUSTIFY_DAYS и JUSTIFY_HOURS с дополнительными настройками знаков. Вернутьinterval тип

Ниже приведены примеры функций ISFINITE () -

testdb=# SELECT justify_days(interval '35 days');
 justify_days
--------------
 1 mon 5 days
(1 row)


testdb=# SELECT justify_hours(interval '27 hours');
 justify_hours
----------------
 1 day 03:00:00
(1 row)


testdb=# SELECT justify_interval(interval '1 mon -1 hour');
 justify_interval
------------------
 29 days 23:00:00
(1 row)