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_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