postgresql разница дат в днях

Postgresql разница дат в днях

Все описанные ниже функции и операторы принимают две разновидности типов time или timestamp : с часовым поясом ( time with time zone и timestamp with time zone ) и без него ( time without time zone и timestamp without time zone ). Для краткости здесь они рассматриваются вместе. Кроме того, операторы + и * обладают переместительным свойством (например, date + integer = integer + date); здесь будет приведён только один вариант для каждой пары.

Таблица 9.27. Операторы даты/времени

Таблица 9.28. Функции даты/времени

В дополнение к этим функциям поддерживается SQL-оператор OVERLAPS :

Год, делённый на 10 dow

День недели, считая с воскресенья ( 0 ) до субботы ( 6 )

Для значений timestamp with time zone это число секунд с 1970-01-01 00:00:00 UTC (может быть отрицательным); для значений date и timestamp это число секунд с 1970-01-01 00:00:00 по местному времени, а для interval — общая длительность интервала в секундах

Преобразовать время эпохи назад, в значение дата/время можно так:

День недели, считая с понедельника ( 1 ) до воскресенья ( 7 )

Результат отличается от dow только для воскресенья. Такая нумерация соответствует ISO 8601. isoyear

Этого поля не было в PostgreSQL до версии 8.3. microseconds

Значение секунд с дробной частью, умноженное на 1 000 000; заметьте, что оно включает и целые секунды millennium

Годы 20 века относятся ко второму тысячелетию. Третье тысячелетие началось 1 января 2001 г. milliseconds

Значение секунд с дробной частью, умноженное на 1 000; заметьте, что оно включает и целые секунды. minute

Поле часов в смещении часового пояса timezone_minute

Поле минут в смещении часового пояса week

Поле года. Учтите, что года 0 не было, и это следует иметь в виду, вычитая из годов нашей эры годы до нашей эры.

Функция extract в основном предназначена для вычислительных целей. Функции форматирования даты/времени описаны в Разделе 9.8.

9.9.2. date_trunc

Функция date_trunc работает подобно trunc для чисел.

Параметр поле может принимать следующие значения:

microseconds
milliseconds
second
minute
hour
day
week
month
quarter
year
decade
century
millennium

9.9.3. AT TIME ZONE

Указание AT TIME ZONE позволяет переводить дату/время без часового пояса в дату/время с часовым поясом и обратно, а также пересчитывать значения времени для различных часовых поясов. Все разновидности этого указания проиллюстрированы в Таблице 9.29.

Таблица 9.29. Разновидности AT TIME ZONE

ВыражениеТип результатаОписание
timestamp without time zone AT TIME ZONE часовой_поясtimestamp with time zoneВоспринимает заданное время без указания часового пояса как время в указанном часовом поясе
timestamp with time zone AT TIME ZONE часовой_поясtimestamp without time zoneПереводит данное значение timestamp с часовым поясом в другой часовой пояс, но не сохраняет информацию о нём в результате
time with time zone AT TIME ZONE часовой_поясtime with time zoneПереводит данное время с часовым поясом в другой часовой пояс

В этих выражениях желаемый часовой_пояс можно задать либо в виде текстовой строки (например, ‘America/Los_Angeles’ ), либо как интервал (например, INTERVAL ‘-08:00’ ). В первом случае название часового пояса можно указать любым из способов, описанных в Подразделе 8.5.3.

Примеры (в предположении, что местный часовой пояс America/Los_Angeles ):

В первом примере для значения, заданного без часового пояса, указывается часовой пояс и полученное время выводится в текущем часовом поясе (заданном параметром TimeZone ). Во втором примере значение времени смещается в заданный часовой пояс и выдаётся без указания часового пояса. Этот вариант позволяет хранить и выводить значения с часовым поясом, отличным от текущего. В третьем примере время в часовом поясе Токио пересчитывается для часового пояса Чикаго. При переводе значений времени без даты в другие часовые пояса используются определения часовых поясов, действующие в данный момент.

9.9.4. Текущая дата/время

Postgres Pro предоставляет набор функций, результат которых зависит от текущей даты и времени. Все следующие функции соответствуют стандарту SQL и возвращают значения, отражающие время начала текущей транзакции:

CURRENT_TIME и CURRENT_TIMESTAMP возвращают время с часовым поясом. В результатах LOCALTIME и LOCALTIMESTAMP нет информации о часовом поясе.

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

Примечание

В других СУБД эти значения могут изменяться чаще.

В Postgres Pro есть также функции, возвращающие время начала текущего оператора, а также текущее время в момент вызова функции. Таким образом, в Postgres Pro есть следующие функции, не описанные в стандарте SQL:

Подсказка

Третья форма не подходит для указания в качестве значения DEFAULT при создании таблицы. Система преобразует now в значение timestamp в момент разбора константы, поэтому, когда будет вставляться значение по умолчанию, в соответствующем столбце окажется время создания таблицы! Первые две формы не будут вычисляться, пока не потребуется значение по умолчанию, так как это вызовы функции. Поэтому они дадут желаемый результат при добавлении строки в таблицу.

9.9.5. Задержка выполнения

В случае необходимости вы можете приостановить выполнение серверного процесса, используя следующие функции:

Примечание

Действительное разрешение интервала задержки зависит от платформы; обычно это 0.01. Фактическая длительность задержки не будет меньше указанного времени, но может быть больше, в зависимости, например от нагрузки на сервер. В частности, не гарантируется, что pg_sleep_until проснётся именно в указанное время, но она точно не проснётся раньше.

Предупреждение

Прежде чем вызывать pg_sleep или её вариации, убедитесь в том, что в текущем сеансе нет ненужных блокировок. В противном случае в состояние ожидания могут перейти и другие сеансы, так что это отразится на системе в целом.

[7] 60, если операционная система поддерживает секунды координации

Источник

Postgresql разница дат в днях

Таблица 9.31. Операторы даты/времени

date + integer → date

Добавляет к дате заданное число дней

date ‘2001-09-28’ + 7 → 2001-10-05

date + interval → timestamp

Добавляет к дате интервал

date ‘2001-09-28’ + interval ‘1 hour’ → 2001-09-28 01:00:00

date + time → timestamp

Добавляет к дате время

date ‘2001-09-28′ + time ’03:00’ → 2001-09-28 03:00:00

interval + interval → interval

interval ‘1 day’ + interval ‘1 hour’ → 1 day 01:00:00

timestamp + interval → timestamp

Добавляет к отметке времени интервал

timestamp ‘2001-09-28 01:00′ + interval ’23 hours’ → 2001-09-29 00:00:00

time + interval → time

Добавляет к времени интервал

time ’01:00′ + interval ‘3 hours’ → 04:00:00

Меняет направление интервала

Вычитает даты, выдавая разницу в днях

Вычитает из даты заданное число дней

Вычитает из даты интервал

Вычитает из одного времени другое

Вычитает из времени интервал

Вычитает из отметки времени интервал

Вычитает из одного интервала другой

Вычитает из одной отметки времени другую (преобразуя 24-часовые интервалы в дни подобно justify_hours() )

interval * double precision → interval

Умножает интервал на скалярное значение

interval ‘1 second’ * 900 → 00:15:00

interval ‘1 day’ * 21 → 21 days

interval ‘1 hour’ * 3.5 → 03:30:00

interval / double precision → interval

Делит интервал на скалярное значение

interval ‘1 hour’ / 1.5 → 00:40:00

Таблица 9.32. Функции даты/времени

Вычитает аргументы и выдаёт « символический » результат с годами и месяцами, а не просто днями

age(timestamp ‘2001-04-10’, timestamp ‘1957-06-13’) → 43 years 9 mons 27 days (43 года 9 месяцев 27 дней)

age ( timestamp ) → interval

Вычитает аргумент из current_date (полночь текущего дня)

age(timestamp ‘1957-06-13’) → 62 years 6 mons 10 days (62 года 6 месяцев 10 дней)

clock_timestamp ( ) → timestamp with time zone

Текущая дата и время (меняется в процессе выполнения операторов); см. Подраздел 9.9.4

clock_timestamp() → 2019-12-23 14:39:53.662522-05

current_date → 2019-12-23

current_time → time with time zone

Текущее время суток; см. Подраздел 9.9.4

current_time → 14:39:53.662522-05

current_time ( integer ) → time with time zone

Текущее время суток (с ограниченной точностью); см. Подраздел 9.9.4

current_time(2) → 14:39:53.66-05

current_timestamp → timestamp with time zone

Текущая дата и время (на момент начала транзакции); см. Подраздел 9.9.4

current_timestamp → 2019-12-23 14:39:53.662522-05

current_timestamp ( integer ) → timestamp with time zone

Текущие дата и время (на момент начала транзакции; с ограниченной точностью); см. Подраздел 9.9.4

current_timestamp(0) → 2019-12-23 14:39:53-05

Возвращает поле даты/времени (равнозначно extract ); см. Подраздел 9.9.1

date_part(‘hour’, timestamp ‘2001-02-16 20:38:40’) → 20

Возвращает поле интервала (равнозначно extract ); см. Подраздел 9.9.1

date_part(‘month’, interval ‘2 years 3 months’) → 3

Отсекает компоненты даты до заданной точности; см. Подраздел 9.9.2

date_trunc(‘hour’, timestamp ‘2001-02-16 20:38:40’) → 2001-02-16 20:00:00

Отсекает компоненты даты до заданной точности в указанном часовом поясе; см. Подраздел 9.9.2

date_trunc(‘day’, timestamptz ‘2001-02-16 20:38:40+00’, ‘Australia/Sydney’) → 2001-02-16 13:00:00+00

Отсекает компоненты даты до заданной точности; см. Подраздел 9.9.2

date_trunc(‘hour’, interval ‘2 days 3 hours 40 minutes’) → 2 days 03:00:00

extract ( field from timestamp ) → double precision

Возвращает поле даты/времени; см. Подраздел 9.9.1

extract(hour from timestamp ‘2001-02-16 20:38:40’) → 20

extract ( field from interval ) → double precision

Возвращает поле интервала; см. Подраздел 9.9.1

extract(month from interval ‘2 years 3 months’) → 3

isfinite ( date ) → boolean

Проверяет конечность даты (её отличие от +/-бесконечности)

isfinite(date ‘2001-02-16’) → true

isfinite ( timestamp ) → boolean

Проверяет конечность времени (его отличие от +/-бесконечности)

isfinite(timestamp ‘infinity’) → false

isfinite ( interval ) → boolean

Проверяет конечность интервала (в настоящее время все интервалы конечны)

isfinite(interval ‘4 hours’) → true

justify_days ( interval ) → interval

Преобразует интервал так, что каждый 30-дневный период считается одним месяцем

justify_days(interval ’35 days’) → 1 mon 5 days (1 месяц 5 дней)

justify_hours ( interval ) → interval

Преобразует интервал так, что каждый 24-часовой период считается одним днём

justify_hours(interval ’27 hours’) → 1 day 03:00:00 (1 день 03:00:00)

justify_interval ( interval ) → interval

Преобразует интервал с применением justify_days и justify_hours и дополнительно корректирует знаки

Текущее время суток; см. Подраздел 9.9.4

localtime → 14:39:53.662522

localtime ( integer ) → time

Текущее время суток (с ограниченной точностью); см. Подраздел 9.9.4

localtime(0) → 14:39:53

Текущая дата и время (на момент начала транзакции); см. Подраздел 9.9.4

localtimestamp → 2019-12-23 14:39:53.662522

localtimestamp ( integer ) → timestamp

Текущие дата и время (на момент начала транзакции; с ограниченной точностью); см. Подраздел 9.9.4

localtimestamp(2) → 2019-12-23 14:39:53.66

Образует дату из полей: year (год), month (месяц) и day (день)

make_date(2013, 7, 15) → 2013-07-15

Образует интервал из полей: years (годы), months (месяцы), weeks (недели), days (дни), hours (часы), minutes (минуты) и secs (секунды), каждое из которых по умолчанию считается равным нулю.

make_interval(days => 10) → 10 days

Образует время из полей: hour (час), minute (минута) и sec (секунда)

make_time(8, 15, 23.5) → 08:15:23.5

Образует дату и время из полей: year (год), month (месяц), day (день), hour (час), minute (минута) и sec (секунда)

make_timestamp(2013, 7, 15, 8, 15, 23.5) → 2013-07-15 08:15:23.5

Образует дату и время с часовым поясом из полей: year (год), month (месяц), day (день), hour (час), minute (минута) и sec (секунда). Если параметр timezone (часовой пояс) не указан, используется текущий часовой пояс.

make_timestamptz(2013, 7, 15, 8, 15, 23.5) → 2013-07-15 08:15:23.5+01

now ( ) → timestamp with time zone

Текущая дата и время (на момент начала транзакции); см. Подраздел 9.9.4

now() → 2019-12-23 14:39:53.662522-05

statement_timestamp ( ) → timestamp with time zone

Текущая дата и время (на момент начала текущего оператора); см. Подраздел 9.9.4

statement_timestamp() → 2019-12-23 14:39:53.662522-05

timeofday() → Mon Dec 23 14:39:53.662522 2019 EST

transaction_timestamp ( ) → timestamp with time zone

Текущая дата и время (на момент начала транзакции); см. Подраздел 9.9.4

transaction_timestamp() → 2019-12-23 14:39:53.662522-05

to_timestamp ( double precision ) → timestamp with time zone

Преобразует время эпохи Unix (число секунд с 1970-01-01 00:00:00+00) в дату/время с часовым поясом

to_timestamp(1284352323) → 2010-09-13 04:32:03+00

В дополнение к этим функциям поддерживается SQL-оператор OVERLAPS :

При добавлении к значению типа timestamp with time zone значения interval (или при вычитании из него interval ), поле дней в этой дате увеличивается (или уменьшается) на указанное число суток, а время суток остаётся неизменным. При пересечении границы перехода на летнее время (если в часовом поясе текущего сеанса производится этот переход) это означает, что interval ‘1 day’ и interval ’24 hours’ не обязательно будут равны. Например, в часовом поясе America/Denver :

Эта разница объясняется тем, что 2005-04-03 02:00 в часовом поясе America/Denver произошёл переход на летнее время.

Для значений timestamp это день месяца (1–31); для значений interval — число дней decade

Год, делённый на 10 dow

День недели, считая с воскресенья ( 0 ) до субботы ( 6 )

День года (1–365/366) epoch

Для значений timestamp with time zone это число секунд с 1970-01-01 00:00:00 UTC (отрицательное для предшествующего времени); для значений date и timestamp — номинальное число секунд с 1970-01-01 00:00:00 без учёта часового пояса, переходов на летнее время и т. п.; для значений interval — общее количество секунд в интервале

День недели, считая с понедельника ( 1 ) до воскресенья ( 7 )

Результат отличается от dow только для воскресенья. Такая нумерация соответствует ISO 8601. isoyear

Этого поля не было в PostgreSQL до версии 8.3. julian

Юлианская дата, соответствующая дате или дате/времени (для интервала не определена). Значение будет дробным, если заданное время отличается от начала суток по местному времени. За дополнительной информацией обратитесь к Разделу B.7. microseconds

Значение секунд с дробной частью, умноженное на 1 000 000; заметьте, что оно включает и целые секунды millennium

Годы 20 века относятся ко второму тысячелетию. Третье тысячелетие началось 1 января 2001 г. milliseconds

Значение секунд с дробной частью, умноженное на 1 000; заметьте, что оно включает и целые секунды. minute

Для значений timestamp это номер месяца в году (1–12), а для interval — остаток от деления числа месяцев на 12 (0–11) quarter

Квартал (1–4), к которому относится дата second

Секунды, включая дробную часть timezone

Смещение часового пояса от UTC, представленное в секундах. Положительные значения соответствуют часовым поясам к востоку от UTC, а отрицательные — к западу. (Строго говоря, в Postgres Pro используется не UTC, так как секунды координации не учитываются.) timezone_hour

Поле часов в смещении часового пояса timezone_minute

Поле минут в смещении часового пояса week

Поле года. Учтите, что года 0 не было, и это следует иметь в виду, вычитая из годов нашей эры годы до нашей эры.

Примечание

Функция extract в основном предназначена для вычислительных целей. Функции форматирования даты/времени описаны в Разделе 9.8.

9.9.2. date_trunc

Функция date_trunc работает подобно trunc для чисел.

Параметр поле может принимать следующие значения:

microseconds
milliseconds
second
minute
hour
day
week
month
quarter
year
decade
century
millennium

Несколько примеров (в предположении, что выбран часовой пояс America/New_York ):

9.9.3. AT TIME ZONE

Оператор AT TIME ZONE преобразует дату/время без часового пояса в дату/время с часовым поясом и обратно, а также пересчитывает значения time with time zone для различных часовых поясов. Его вариации показаны в Таблице 9.33.

Таблица 9.33. Разновидности AT TIME ZONE

timestamp without time zone AT TIME ZONE часовой_пояс → timestamp with time zone

Переводит значение даты/времени без часового пояса в дату/время с часовым поясом, в предположении, что входное значение задано в указанном поясе.

timestamp ‘2001-02-16 20:38:40’ at time zone ‘America/Denver’ → 2001-02-17 03:38:40+00

timestamp with time zone AT TIME ZONE часовой_пояс → timestamp without time zone

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

timestamp with time zone ‘2001-02-16 20:38:40-05’ at time zone ‘America/Denver’ → 2001-02-16 18:38:40

time with time zone AT TIME ZONE часовой_пояс → time with time zone

Переводит значение времени с часовым поясом в другой часовой пояс. Так как время задаётся без даты, в расчёте используется действующее в данный момент смещение указанного часового пояса от UTC.

time with time zone ’05:34:17-05′ at time zone ‘UTC’ → 10:34:17+00

В этих выражениях желаемый часовой_пояс можно задать либо в виде текстовой строки (например, ‘America/Los_Angeles’ ), либо как интервал (например, INTERVAL ‘-08:00’ ). В первом случае название часового пояса можно указать любым из способов, описанных в Подразделе 8.5.3. Вариант с интервалом полезен, только если для часового пояса смещение от UTC всегда постоянно, что на практике встречается нечасто.

Примеры (в предположении, что параметр TimeZone имеет значение America/Los_Angeles ):

В первом примере для значения, заданного без часового пояса, указывается часовой пояс и полученное время выводится в текущем часовом поясе (заданном параметром TimeZone ). Во втором примере значение времени смещается в заданный часовой пояс и выдаётся без указания часового пояса. Этот вариант позволяет хранить и выводить значения с часовым поясом, отличным от текущего. В третьем примере время в часовом поясе Токио пересчитывается для часового пояса Чикаго.

9.9.4. Текущая дата/время

Postgres Pro предоставляет набор функций, результат которых зависит от текущей даты и времени. Все следующие функции соответствуют стандарту SQL и возвращают значения, отражающие время начала текущей транзакции:

CURRENT_TIME и CURRENT_TIMESTAMP возвращают время с часовым поясом. В результатах LOCALTIME и LOCALTIMESTAMP нет информации о часовом поясе.

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

Примечание

В других СУБД эти значения могут изменяться чаще.

В Postgres Pro есть также функции, возвращающие время начала текущего оператора, а также текущее время в момент вызова функции. Таким образом, в Postgres Pro есть следующие функции, не описанные в стандарте SQL:

Подсказка

Не используйте третью форму для указания значения, которое будет вычисляться позднее, например, в предложении DEFAULT для столбца таблицы. Система преобразует now в значение timestamp в момент разбора константы, поэтому когда будет вставляться такое значение по умолчанию, в соответствующем столбце окажется время создания таблицы! Первые две формы будут вычисляться, только когда значение по умолчанию потребуется, так как это вызовы функции. Поэтому они дадут желаемый результат при добавлении строки в таблицу. (См. также Подраздел 8.5.1.4.)

9.9.5. Задержка выполнения

В случае необходимости выполнение серверного процесса можно приостановить, используя следующие функции:

Примечание

Действительное разрешение интервала задержки зависит от платформы; обычно это 0.01. Фактическая длительность задержки не будет меньше указанного времени, но может быть больше, в зависимости, например от нагрузки на сервер. В частности, не гарантируется, что pg_sleep_until проснётся именно в указанное время, но она точно не проснётся раньше.

Предупреждение

Прежде чем вызывать pg_sleep или её вариации, убедитесь в том, что в текущем сеансе нет ненужных блокировок. В противном случае в состояние ожидания могут перейти и другие сеансы, так что это отразится на системе в целом.

Источник

Postgresql разница дат в днях

Таблица 9.31. Операторы даты/времени

date + integer → date

Добавляет к дате заданное число дней

date ‘2001-09-28’ + 7 → 2001-10-05

date + interval → timestamp

Добавляет к дате интервал

date ‘2001-09-28’ + interval ‘1 hour’ → 2001-09-28 01:00:00

date + time → timestamp

Добавляет к дате время

date ‘2001-09-28′ + time ’03:00’ → 2001-09-28 03:00:00

interval + interval → interval

interval ‘1 day’ + interval ‘1 hour’ → 1 day 01:00:00

timestamp + interval → timestamp

Добавляет к отметке времени интервал

timestamp ‘2001-09-28 01:00′ + interval ’23 hours’ → 2001-09-29 00:00:00

time + interval → time

Добавляет к времени интервал

time ’01:00′ + interval ‘3 hours’ → 04:00:00

Меняет направление интервала

Вычитает даты, выдавая разницу в днях

Вычитает из даты заданное число дней

Вычитает из даты интервал

Вычитает из одного времени другое

Вычитает из времени интервал

Вычитает из отметки времени интервал

Вычитает из одного интервала другой

Вычитает из одной отметки времени другую (преобразуя 24-часовые интервалы в дни подобно justify_hours() )

interval * double precision → interval

Умножает интервал на скалярное значение

interval ‘1 second’ * 900 → 00:15:00

interval ‘1 day’ * 21 → 21 days

interval ‘1 hour’ * 3.5 → 03:30:00

interval / double precision → interval

Делит интервал на скалярное значение

interval ‘1 hour’ / 1.5 → 00:40:00

Таблица 9.32. Функции даты/времени

Вычитает аргументы и выдаёт « символический » результат с годами и месяцами, а не просто днями

age(timestamp ‘2001-04-10’, timestamp ‘1957-06-13’) → 43 years 9 mons 27 days (43 года 9 месяцев 27 дней)

age ( timestamp ) → interval

Вычитает аргумент из current_date (полночь текущего дня)

age(timestamp ‘1957-06-13’) → 62 years 6 mons 10 days (62 года 6 месяцев 10 дней)

clock_timestamp ( ) → timestamp with time zone

Текущая дата и время (меняется в процессе выполнения операторов); см. Подраздел 9.9.4

clock_timestamp() → 2019-12-23 14:39:53.662522-05

current_date → 2019-12-23

current_time → time with time zone

Текущее время суток; см. Подраздел 9.9.4

current_time → 14:39:53.662522-05

current_time ( integer ) → time with time zone

Текущее время суток (с ограниченной точностью); см. Подраздел 9.9.4

current_time(2) → 14:39:53.66-05

current_timestamp → timestamp with time zone

Текущая дата и время (на момент начала транзакции); см. Подраздел 9.9.4

current_timestamp → 2019-12-23 14:39:53.662522-05

current_timestamp ( integer ) → timestamp with time zone

Текущие дата и время (на момент начала транзакции; с ограниченной точностью); см. Подраздел 9.9.4

current_timestamp(0) → 2019-12-23 14:39:53-05

Возвращает поле даты/времени (равнозначно extract ); см. Подраздел 9.9.1

date_part(‘hour’, timestamp ‘2001-02-16 20:38:40’) → 20

Возвращает поле интервала (равнозначно extract ); см. Подраздел 9.9.1

date_part(‘month’, interval ‘2 years 3 months’) → 3

Отсекает компоненты даты до заданной точности; см. Подраздел 9.9.2

date_trunc(‘hour’, timestamp ‘2001-02-16 20:38:40’) → 2001-02-16 20:00:00

Отсекает компоненты даты до заданной точности в указанном часовом поясе; см. Подраздел 9.9.2

date_trunc(‘day’, timestamptz ‘2001-02-16 20:38:40+00’, ‘Australia/Sydney’) → 2001-02-16 13:00:00+00

Отсекает компоненты даты до заданной точности; см. Подраздел 9.9.2

date_trunc(‘hour’, interval ‘2 days 3 hours 40 minutes’) → 2 days 03:00:00

extract ( field from timestamp ) → double precision

Возвращает поле даты/времени; см. Подраздел 9.9.1

extract(hour from timestamp ‘2001-02-16 20:38:40’) → 20

extract ( field from interval ) → double precision

Возвращает поле интервала; см. Подраздел 9.9.1

extract(month from interval ‘2 years 3 months’) → 3

isfinite ( date ) → boolean

Проверяет конечность даты (её отличие от +/-бесконечности)

isfinite(date ‘2001-02-16’) → true

isfinite ( timestamp ) → boolean

Проверяет конечность времени (его отличие от +/-бесконечности)

isfinite(timestamp ‘infinity’) → false

isfinite ( interval ) → boolean

Проверяет конечность интервала (в настоящее время все интервалы конечны)

isfinite(interval ‘4 hours’) → true

justify_days ( interval ) → interval

Преобразует интервал так, что каждый 30-дневный период считается одним месяцем

justify_days(interval ’35 days’) → 1 mon 5 days (1 месяц 5 дней)

justify_hours ( interval ) → interval

Преобразует интервал так, что каждый 24-часовой период считается одним днём

justify_hours(interval ’27 hours’) → 1 day 03:00:00 (1 день 03:00:00)

justify_interval ( interval ) → interval

Преобразует интервал с применением justify_days и justify_hours и дополнительно корректирует знаки

Текущее время суток; см. Подраздел 9.9.4

localtime → 14:39:53.662522

localtime ( integer ) → time

Текущее время суток (с ограниченной точностью); см. Подраздел 9.9.4

localtime(0) → 14:39:53

Текущая дата и время (на момент начала транзакции); см. Подраздел 9.9.4

localtimestamp → 2019-12-23 14:39:53.662522

localtimestamp ( integer ) → timestamp

Текущие дата и время (на момент начала транзакции; с ограниченной точностью); см. Подраздел 9.9.4

localtimestamp(2) → 2019-12-23 14:39:53.66

Образует дату из полей: year (год), month (месяц) и day (день)

make_date(2013, 7, 15) → 2013-07-15

Образует интервал из полей: years (годы), months (месяцы), weeks (недели), days (дни), hours (часы), minutes (минуты) и secs (секунды), каждое из которых по умолчанию считается равным нулю.

make_interval(days => 10) → 10 days

Образует время из полей: hour (час), minute (минута) и sec (секунда)

make_time(8, 15, 23.5) → 08:15:23.5

Образует дату и время из полей: year (год), month (месяц), day (день), hour (час), minute (минута) и sec (секунда)

make_timestamp(2013, 7, 15, 8, 15, 23.5) → 2013-07-15 08:15:23.5

Образует дату и время с часовым поясом из полей: year (год), month (месяц), day (день), hour (час), minute (минута) и sec (секунда). Если параметр timezone (часовой пояс) не указан, используется текущий часовой пояс.

make_timestamptz(2013, 7, 15, 8, 15, 23.5) → 2013-07-15 08:15:23.5+01

now ( ) → timestamp with time zone

Текущая дата и время (на момент начала транзакции); см. Подраздел 9.9.4

now() → 2019-12-23 14:39:53.662522-05

statement_timestamp ( ) → timestamp with time zone

Текущая дата и время (на момент начала текущего оператора); см. Подраздел 9.9.4

statement_timestamp() → 2019-12-23 14:39:53.662522-05

timeofday() → Mon Dec 23 14:39:53.662522 2019 EST

transaction_timestamp ( ) → timestamp with time zone

Текущая дата и время (на момент начала транзакции); см. Подраздел 9.9.4

transaction_timestamp() → 2019-12-23 14:39:53.662522-05

to_timestamp ( double precision ) → timestamp with time zone

Преобразует время эпохи Unix (число секунд с 1970-01-01 00:00:00+00) в дату/время с часовым поясом

to_timestamp(1284352323) → 2010-09-13 04:32:03+00

В дополнение к этим функциям поддерживается SQL-оператор OVERLAPS :

При добавлении к значению типа timestamp with time zone значения interval (или при вычитании из него interval ), поле дней в этой дате увеличивается (или уменьшается) на указанное число суток, а время суток остаётся неизменным. При пересечении границы перехода на летнее время (если в часовом поясе текущего сеанса производится этот переход) это означает, что interval ‘1 day’ и interval ’24 hours’ не обязательно будут равны. Например, в часовом поясе America/Denver :

Эта разница объясняется тем, что 2005-04-03 02:00 в часовом поясе America/Denver произошёл переход на летнее время.

Для значений timestamp это день месяца (1–31); для значений interval — число дней decade

Год, делённый на 10 dow

День недели, считая с воскресенья ( 0 ) до субботы ( 6 )

День года (1–365/366) epoch

Для значений timestamp with time zone это число секунд с 1970-01-01 00:00:00 UTC (отрицательное для предшествующего времени); для значений date и timestamp — номинальное число секунд с 1970-01-01 00:00:00 без учёта часового пояса, переходов на летнее время и т. п.; для значений interval — общее количество секунд в интервале

День недели, считая с понедельника ( 1 ) до воскресенья ( 7 )

Результат отличается от dow только для воскресенья. Такая нумерация соответствует ISO 8601. isoyear

Этого поля не было в PostgreSQL до версии 8.3. julian

Юлианская дата, соответствующая дате или дате/времени (для интервала не определена). Значение будет дробным, если заданное время отличается от начала суток по местному времени. За дополнительной информацией обратитесь к Разделу B.7. microseconds

Значение секунд с дробной частью, умноженное на 1 000 000; заметьте, что оно включает и целые секунды millennium

Годы 20 века относятся ко второму тысячелетию. Третье тысячелетие началось 1 января 2001 г. milliseconds

Значение секунд с дробной частью, умноженное на 1 000; заметьте, что оно включает и целые секунды. minute

Для значений timestamp это номер месяца в году (1–12), а для interval — остаток от деления числа месяцев на 12 (0–11) quarter

Квартал (1–4), к которому относится дата second

Секунды, включая дробную часть timezone

Смещение часового пояса от UTC, представленное в секундах. Положительные значения соответствуют часовым поясам к востоку от UTC, а отрицательные — к западу. (Строго говоря, в PostgreSQL используется не UTC, так как секунды координации не учитываются.) timezone_hour

Поле часов в смещении часового пояса timezone_minute

Поле минут в смещении часового пояса week

Поле года. Учтите, что года 0 не было, и это следует иметь в виду, вычитая из годов нашей эры годы до нашей эры.

Примечание

Функция extract в основном предназначена для вычислительных целей. Функции форматирования даты/времени описаны в Разделе 9.8.

9.9.2. date_trunc

Функция date_trunc работает подобно trunc для чисел.

Параметр поле может принимать следующие значения:

microseconds
milliseconds
second
minute
hour
day
week
month
quarter
year
decade
century
millennium

Несколько примеров (в предположении, что выбран часовой пояс America/New_York ):

9.9.3. AT TIME ZONE

Оператор AT TIME ZONE преобразует дату/время без часового пояса в дату/время с часовым поясом и обратно, а также пересчитывает значения time with time zone для различных часовых поясов. Его вариации показаны в Таблице 9.33.

Таблица 9.33. Разновидности AT TIME ZONE

timestamp without time zone AT TIME ZONE часовой_пояс → timestamp with time zone

Переводит значение даты/времени без часового пояса в дату/время с часовым поясом, в предположении, что входное значение задано в указанном поясе.

timestamp ‘2001-02-16 20:38:40’ at time zone ‘America/Denver’ → 2001-02-17 03:38:40+00

timestamp with time zone AT TIME ZONE часовой_пояс → timestamp without time zone

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

timestamp with time zone ‘2001-02-16 20:38:40-05’ at time zone ‘America/Denver’ → 2001-02-16 18:38:40

time with time zone AT TIME ZONE часовой_пояс → time with time zone

Переводит значение времени с часовым поясом в другой часовой пояс. Так как время задаётся без даты, в расчёте используется действующее в данный момент смещение указанного часового пояса от UTC.

time with time zone ’05:34:17-05′ at time zone ‘UTC’ → 10:34:17+00

В этих выражениях желаемый часовой_пояс можно задать либо в виде текстовой строки (например, ‘America/Los_Angeles’ ), либо как интервал (например, INTERVAL ‘-08:00’ ). В первом случае название часового пояса можно указать любым из способов, описанных в Подразделе 8.5.3. Вариант с интервалом полезен, только если для часового пояса смещение от UTC всегда постоянно, что на практике встречается нечасто.

Примеры (в предположении, что параметр TimeZone имеет значение America/Los_Angeles ):

В первом примере для значения, заданного без часового пояса, указывается часовой пояс и полученное время выводится в текущем часовом поясе (заданном параметром TimeZone ). Во втором примере значение времени смещается в заданный часовой пояс и выдаётся без указания часового пояса. Этот вариант позволяет хранить и выводить значения с часовым поясом, отличным от текущего. В третьем примере время в часовом поясе Токио пересчитывается для часового пояса Чикаго.

9.9.4. Текущая дата/время

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

CURRENT_TIME и CURRENT_TIMESTAMP возвращают время с часовым поясом. В результатах LOCALTIME и LOCALTIMESTAMP нет информации о часовом поясе.

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

Примечание

В других СУБД эти значения могут изменяться чаще.

В PostgreSQL есть также функции, возвращающие время начала текущего оператора, а также текущее время в момент вызова функции. Таким образом, в PostgreSQL есть следующие функции, не описанные в стандарте SQL:

Подсказка

Не используйте третью форму для указания значения, которое будет вычисляться позднее, например, в предложении DEFAULT для столбца таблицы. Система преобразует now в значение timestamp в момент разбора константы, поэтому когда будет вставляться такое значение по умолчанию, в соответствующем столбце окажется время создания таблицы! Первые две формы будут вычисляться, только когда значение по умолчанию потребуется, так как это вызовы функции. Поэтому они дадут желаемый результат при добавлении строки в таблицу. (См. также Подраздел 8.5.1.4.)

9.9.5. Задержка выполнения

В случае необходимости выполнение серверного процесса можно приостановить, используя следующие функции:

Примечание

Действительное разрешение интервала задержки зависит от платформы; обычно это 0.01. Фактическая длительность задержки не будет меньше указанного времени, но может быть больше, в зависимости, например от нагрузки на сервер. В частности, не гарантируется, что pg_sleep_until проснётся именно в указанное время, но она точно не проснётся раньше.

Предупреждение

Прежде чем вызывать pg_sleep или её вариации, убедитесь в том, что в текущем сеансе нет ненужных блокировок. В противном случае в состояние ожидания могут перейти и другие сеансы, так что это отразится на системе в целом.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *