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 esempiomonth,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_zoneopzionale 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