Dans PostgreSQL, le date_trunc()
la fonction tronque une valeur de date/heure à une précision spécifiée.
Il peut également tronquer la valeur à une précision spécifiée dans un fuseau horaire spécifié.
Vous pourriez le considérer comme une version de date du trunc()
fonction (qui tronque les nombres).
Syntaxe
La syntaxe ressemble à ceci :
date_trunc(field, source [, time_zone ])
Où :
field
est la précision pour laquelle tronquer la valeur d'entrée (par exemplemonth
,hour
, etc). Voir ci-dessous pour une liste complète des valeurs acceptables pour cet argument.source
est une expression de valeur de type timestamp , horodatage avec fuseau horaire , ou intervalle . Notez que les valeurs de type date et temps sont convertis automatiquement en horodatage ou intervalle , respectivement.- Le
time_zone
facultatif Un argument peut être fourni pour spécifier un fuseau horaire différent.
Le champ field
l'argument peut être l'un des suivants :
- microsecondes
- millisecondes
- seconde
- minute
- heure
- jour
- semaine
- mois
- quart
- année
- décennie
- siècle
- millénaire
Exemple de base
Voici un exemple pour illustrer.
SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');
Résultat :
2020-06-30 17:00:00
Nous pouvons voir que la partie heure de la date a été tronquée à partir de 17:29:31
à 17:00:00
. C'est parce que j'ai utilisé hour
pour le premier argument.
Le voici avec des valeurs différentes pour le premier argument.
\x
SELECT
date_trunc('minute', timestamp '2020-06-30 17:29:31'),
date_trunc('day', timestamp '2020-06-30 17:29:31'),
date_trunc('month', timestamp '2020-06-30 17:29:31'),
date_trunc('year', timestamp '2020-06-30 17:29:31');
Résultat (en utilisant la sortie verticale) :
date_trunc | 2020-06-30 17:29:00 date_trunc | 2020-06-30 00:00:00 date_trunc | 2020-06-01 00:00:00 date_trunc | 2020-01-01 00:00:00
Dans ce cas, j'ai utilisé \x
pour activer l'affichage étendu/la sortie verticale, afin de faciliter la lecture des résultats.
Avec fuseau horaire
Voici un exemple pour illustrer le WITH TIME ZONE
option.
SELECT
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+00'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+01');
Résultat :
date_trunc | 2020-07-01 03:00:00+10 date_trunc | 2020-07-01 02:00:00+10
Le fuseau horaire local lorsque j'ai exécuté ces exemples était Australie/Brisbane.
Vous pouvez également ajouter le nom complet du fuseau horaire comme troisième argument.
SELECT
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland');
Résultat :
date_trunc | 2020-06-30 15:00:00+10 date_trunc | 2020-06-30 15:00:00+10
Avec intervalle
Voici un exemple qui utilise une valeur d'intervalle au lieu d'une date.
SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');
Résultat :
7 days, 5:00:00