PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment date_trunc() fonctionne dans PostgreSQL

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 exemple month , 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