PostgreSQL funciones y operadores de fecha/hora

Operadores de fecha/hora

La siguiente tabla demuestra el comportamiento de los operadores aritméticos básicos (+, *, etc.):

OperadorEjemploResultado
+ 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' (days)
- 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'

Funciones de fecha/hora

FunciónTipo de retornoDescripciónEjemploResultado
age(timestamp, timestamp) intervalDespués de restar los argumentossimbólicoResultado, usando años y meses, no solo díasage(timestamp '2001-04-10', timestamp '1957-06-13')43 years 9 mons 27 days
age(timestamp)intervaldesdecurrent_dateResultado de restar los argumentos (a la medianoche)age(timestamp '1957-06-13')43 years 8 mons 3 days
clock_timestamp() timestamp with time zoneMarca de tiempo actual del reloj en tiempo real (varía en el momento de la ejecución de la sentencia)  
current_date dateLa fecha actual;  
current_time time with time zoneLa hora del día;  
current_timestamp timestamp with time zoneMarca de tiempo al inicio de la transacción actual;  
date_part(text, timestamp) double precisionObtener subcampo (equivalente aextract); date_part('hour', timestamp '2001-02-16 20:38:40')20
date_part(text, interval)double precisionObtener subcampo (equivalente aextract); date_part('month', interval '2 years 3 months')3
date_trunc(text, timestamp) timestampTruncar a la precisión especificada;date_trunc('hour', timestamp '2001-02-16 20:38:40')2001-02-16 20:00:00
date_trunc(text, interval)intervalExtraer la precisión especificada,date_trunc('hour', interval '2 days 3 hours 40 minutes')2 days 03:00:00
extract(field from timestamp) double precisionObtener subcampo;extract(hour from timestamp '2001-02-16 20:38:40')20
extract(field from interval)double precisionObtener subcampo;extract(month from interval '2 years 3 months')3
isfinite(date) booleanProbar si es una fecha finita (no +/- infinito)isfinite(date '2001-02-16')true
isfinite(timestamp)booleanProbar si es una marca de tiempo finita (no +/- infinito)isfinite(timestamp '2001-02-16 21:28:30')true
isfinite(interval)booleanProbar si es un intervalo de tiempo finitoisfinite(interval '4 hours')true
justify_days(interval) intervalAjustar el intervalo según 30 días por mesjustify_days(interval '35 days')1 mon 5 days
justify_hours(interval) intervalAjustar el intervalo según 24 horas por díajustify_hours(interval '27 hours')1 day 03:00:00
justify_interval(interval) intervalUsarjustify_daysyjustify_hoursAjustar el intervalo y también ajustar el signojustify_interval(interval '1 mon -1 hour')29 days 23:00:00
localtime timeLa hora del día;  
localtimestamp timestampMarca de tiempo al inicio de la transacción actual;  
make_date(year int, month int, day int) dateCrear fecha a partir de los campos de año, mes y díamake_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) intervalCrear un intervalo a partir de los campos de año, mes, semana, día, hora, minuto y segundomake_interval(days := 10)10 days
make_time(hour int, min int, sec double precision) timeCrear hora a partir de los campos de hora, minuto y segundomake_time(8, 15, 23.5)08:15:23.5
make_timestamp(year int, month int, day int, hour int, min int, sec double precision) timestampCrear marca de tiempo a partir de los campos de año, mes, día, hora, minuto y segundomake_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 zoneCrear una marca de tiempo con zona horaria a partir de los campos de año, mes, día, hora, minuto y segundo. Si no se especificatimezonela zona horaria, se usa la zona horaria actual.make_timestamptz(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5+01
now() timestamp with time zoneMarca de tiempo al inicio de la transacción actual;  
statement_timestamp() timestamp with time zoneMarca de tiempo actual del reloj en tiempo real;  
timeofday() textyclock_timestampIgual, pero el resultado es untextcadena;  
transaction_timestamp() timestamp with time zoneMarca de tiempo al inicio de la transacción actual;  
Otras extensiones