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ù :
fieldest 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.sourceest 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_zonefacultatif 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