Fonctions et opérateurs de date/heure PostgreSQL

Opérateurs de date/heure

Le tableau ci-dessous montre le comportement des opérateurs arithmétiques de base (+, *, etc.) :

OperatorExempleRésultat
+ 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' (jours)
- 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'

Fonctions de date/heure

FonctionType de retourDescriptionExempleRésultat
age(timestamp, timestamp) intervalSoustrait les arguments, produisant un résultat"symbolique"qui utilise des années et des mois, pas seulement des joursage(timestamp '2001-04-10', timestamp '1957-06-13')43 ans 9 mois 27 jours
age(timestamp)intervalfromcurrent_dateRésultat de la soustraction de l'argument (à minuit)age(timestamp '1957-06-13')43 ans 8 mois 3 jours
clock_timestamp() timestamp with time zoneHorodatage actuel de l'horloge temps réel (change pendant l'exécution de l'instruction)  
current_date dateDate actuelle ;  
current_time time with time zoneHeure du jour ;  
current_timestamp timestamp with time zoneHorodatage au début de la transaction en cours ;  
date_part(text, timestamp) double precisionObtenir un sous-champ (équivalent àextract); date_part('hour', timestamp '2001-02-16 20:38:40')20
date_part(text, interval)double precisionObtenir un sous-champ (équivalent àextract); date_part('month', interval '2 years 3 months')3
date_trunc(text, timestamp) timestampTronquer à la précision spécifiée;date_trunc('hour', timestamp '2001-02-16 20:38:40')2001-02-16 20:00:00
date_trunc(text, interval)intervalTronquer à la précision spécifiée,date_trunc('hour', interval '2 days 3 hours 40 minutes')2 days 03:00:00
extract(champ from timestamp) double precisionObtenir un sous-champ;extract(hour from timestamp '2001-02-16 20:38:40')20
extract(champ from interval)double precisionObtenir un sous-champ;extract(month from interval '2 years 3 months')3
isfinite(date) booléenVérifier s'il s'agit d'une date finie (pas +/- infini)isfinite(date '2001-02-16')vrai
isfinite(timestamp)booléenVérifier s'il s'agit d'un horodatage fini (pas +/- infini)isfinite(timestamp '2001-02-16 21:28:30')vrai
isfinite(interval)booléenVérifier s'il s'agit d'un intervalle de temps finiisfinite(interval '4 hours')vrai
justify_days(interval) intervalAjuster l'intervalle de temps selon 30 jours par moisjustify_days(interval '35 days')1 mon 5 days
justify_hours(interval) intervalAjuster l'intervalle de temps selon 24 heures par jourjustify_hours(interval '27 hours')1 day 03:00:00
justify_interval(interval) intervalUtilisationjustify_daysetjustify_hoursAjuster l'intervalle de temps tout en effectuant également un ajustement de signejustify_interval(interval '1 mon -1 hour')29 days 23:00:00
localtime timeHeure du jour ;  
localtimestamp timestampHorodatage au début de la transaction en cours ;  
make_date(year int, month int, day int) dateCréer une date à partir des champs année, mois et jourmake_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) intervalCréer un intervalle à partir des champs année, mois, semaine, jour, heure, minute et secondemake_interval(days := 10)10 days
make_time(hour int, min int, sec double precision) timeCréer une heure à partir des champs heure, minute et secondemake_time(8, 15, 23.5)08:15:23.5
make_timestamp(year int, month int, day int, hour int, min int, sec double precision) timestampCréer un horodatage à partir des champs année, mois, jour, heure, minute et secondemake_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 zoneCréer un horodatage avec fuseau horaire à partir des champs année, mois, jour, heure, minute et seconde. Lorsque nontimezonespécifié, le fuseau horaire actuel est utilisé.make_timestamptz(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5+01
now() timestamp with time zoneHorodatage au début de la transaction en cours ;  
statement_timestamp() timestamp with time zoneHorodatage actuel de l'horloge temps réel ;  
timeofday() textetclock_timestampIdentique, mais le résultat est unetextchaîne ;  
transaction_timestamp() timestamp with time zoneHorodatage au début de la transaction en cours ;  
Autres extensions