PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come funziona date_trunc() in PostgreSQL

In PostgreSQL, il date_trunc() La funzione tronca un valore di data/ora con una precisione specificata.

Può anche troncare il valore a una precisione specificata in un fuso orario specificato.

Potresti pensarlo come una versione data di trunc() funzione (che tronca i numeri).

Sintassi

La sintassi è questa:

date_trunc(field, source [, time_zone ])

Dove:

  • field è la precisione con cui troncare il valore di input (ad esempio month , hour , eccetera). Vedi sotto per un elenco completo di valori accettabili per questo argomento.
  • source è un'espressione di valore di tipo timestamp , indicatore orario con fuso orario o intervallo . Tieni presente che i valori di tipo data e tempo vengono trasmessi automaticamente a timestamp o intervallo , rispettivamente.
  • Il time_zone opzionale argomento può essere fornito per specificare un fuso orario diverso.

Il field argomento può essere uno dei seguenti:

  • microsecondi
  • millisecondi
  • secondo
  • minuto
  • ora
  • giorno
  • settimana
  • mese
  • trimestre
  • anno
  • decennio
  • secolo
  • millennio

Esempio di base

Ecco un esempio da dimostrare.

SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');

Risultato:

2020-06-30 17:00:00

Possiamo vedere che la parte temporale della data è stata troncata da 17:29:31 alle 17:00:00 . Questo perché ho usato hour per il primo argomento.

Eccolo con valori diversi per il primo argomento.

\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');

Risultato (usando l'output 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

In questo caso ho usato \x per abilitare la visualizzazione espansa/l'output verticale, in modo che sia più facile leggere i risultati.

Con fuso orario

Ecco un esempio per dimostrare il WITH TIME ZONE opzione.

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');

Risultato:

date_trunc | 2020-07-01 03:00:00+10
date_trunc | 2020-07-01 02:00:00+10

Il fuso orario locale quando ho eseguito questi esempi era Australia/Brisbane.

Puoi anche aggiungere il nome completo del fuso orario come terzo argomento.

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');

Risultato:

date_trunc | 2020-06-30 15:00:00+10
date_trunc | 2020-06-30 15:00:00+10

Con intervallo

Ecco un esempio che utilizza un valore di intervallo anziché una data.

SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');

Risultato:

7 days, 5:00:00