Функции и операторы даты/времени PostgreSQL

Операторы даты/времени

В таблице ниже показано поведение основных арифметических операторов (+, * и т. д.):

OperatorПримерРезультат
+ date '2001-09-28' + integer '7'date '2001-10-05'
+ date '2001-09-28' + interval '1 hour'timestamp '2001-09-28 01:00:00'
+ date '2001-09-28' + time '03:00'timestamp '2001-09-28 03:00:00'
+ interval '1 day' + interval '1 hour'interval '1 day 01:00:00'
+ timestamp '2001-09-28 01:00' + interval '23 hours'timestamp '2001-09-29 00:00:00'
+ time '01:00' + interval '3 hours'time '04:00:00'
- - interval '23 hours'interval '-23:00:00'
- date '2001-10-01' - date '2001-09-28'integer '3' (дни)
- date '2001-10-01' - integer '7'date '2001-09-24'
- date '2001-09-28' - interval '1 hour'timestamp '2001-09-27 23:00:00'
- time '05:00' - time '03:00'interval '02:00:00'
- time '05:00' - interval '2 hours'time '03:00:00'
- timestamp '2001-09-28 23:00' - interval '23 hours'timestamp '2001-09-28 00:00:00'
- interval '1 day' - interval '1 hour'interval '1 day -01:00:00'
- timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'interval '1 day 15:00:00'
* 900 * interval '1 second'interval '00:15:00'
* 21 * interval '1 day'interval '21 days'
* double precision '3.5' * interval '1 hour'interval '03:30:00'
/ interval '1 hour' / double precision '1.5'interval '00:40:00'

Функции даты/времени

ФункцияТип возвращаемого значенияОписаниеПримерРезультат
age(timestamp, timestamp) intervalВычитает аргументы, получая«символический»результат, который использует годы и месяцы, а не только дниage(timestamp '2001-04-10', timestamp '1957-06-13')43 года 9 мес. 27 дней
age(timestamp)intervalfromcurrent_dateРезультат вычитания аргумента (в полночь)age(timestamp '1957-06-13')43 года 8 мес. 3 дня
clock_timestamp() timestamp with time zoneТекущая временная метка часов реального времени (изменяется во время выполнения оператора)  
current_date dateТекущая дата;  
current_time time with time zoneВремя суток;  
current_timestamp timestamp with time zoneВременная метка начала текущей транзакции;  
date_part(text, timestamp) double precisionПолучить подполе (эквивалентноextract); date_part('hour', timestamp '2001-02-16 20:38:40')20
date_part(text, interval)double precisionПолучить подполе (эквивалентноextract); date_part('month', interval '2 years 3 months')3
date_trunc(text, timestamp) timestampУсечь до указанной точности;date_trunc('hour', timestamp '2001-02-16 20:38:40')2001-02-16 20:00:00
date_trunc(text, interval)intervalУсечь до указанной точности,date_trunc('hour', interval '2 days 3 hours 40 minutes')2 days 03:00:00
extract(поле from timestamp) double precisionПолучить подполе;extract(hour from timestamp '2001-02-16 20:38:40')20
extract(поле from interval)double precisionПолучить подполе;extract(month from interval '2 years 3 months')3
isfinite(date) логическое значениеПроверить, является ли дата конечной (не +/- бесконечность)isfinite(date '2001-02-16')истина
isfinite(timestamp)логическое значениеПроверить, является ли это конечной отметкой времени (не +/- бесконечность)isfinite(timestamp '2001-02-16 21:28:30')истина
isfinite(interval)логическое значениеПроверить, является ли это конечным временным интерваломisfinite(interval '4 hours')истина
justify_days(interval) intervalСкорректировать временной интервал в соответствии с 30 days per monthjustify_days(interval '35 days')1 mon 5 days
justify_hours(interval) intervalСкорректировать временной интервал в соответствии с 24 hours per dayjustify_hours(interval '27 hours')1 day 03:00:00
justify_interval(interval) intervalИспользованиеjustify_daysиjustify_hoursскорректировать временной интервал, также выполняя корректировку знакаjustify_interval(interval '1 mon -1 hour')29 days 23:00:00
localtime timeВремя суток;  
localtimestamp timestampВременная метка начала текущей транзакции;  
make_date(year int, month int, day int) dateСоздать дату из полей года, месяца и дняmake_date(2013, 7, 15)2013-07-15
make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0) intervalСоздать интервал из полей года, месяца, недели, дня, часа, минуты и секундыmake_interval(days := 10)10 days
make_time(hour int, min int, sec double precision) timeСоздать время из полей часа, минуты и секундыmake_time(8, 15, 23.5)08:15:23.5
make_timestamp(year int, month int, day int, hour int, min int, sec double precision) timestampСоздать отметку времени из полей года, месяца, дня, часа, минуты и секундыmake_timestamp(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ]) timestamp with time zoneСоздать отметку времени с часовым поясом из полей года, месяца, дня, часа, минуты и секунды. Если неtimezoneуказан, используется текущий часовой пояс.make_timestamptz(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5+01
now() timestamp with time zoneВременная метка начала текущей транзакции;  
statement_timestamp() timestamp with time zoneТекущая временная метка часов реального времени;  
timeofday() textиclock_timestampТо же, но результат являетсяtextстрокой;  
transaction_timestamp() timestamp with time zoneВременная метка начала текущей транзакции;  
Другие расширения