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)