I PostgreSQL er date_trunc()
funktion afkorter en dato/tidsværdi med en specificeret præcision.
Den kan også afkorte værdien til en specificeret præcision i en specificeret tidszone.
Du kunne tænke på det som en datoversion af trunc()
funktion (som afkorter tal).
Syntaks
Syntaksen ser sådan ud:
date_trunc(field, source [, time_zone ])
Hvor:
field
er den præcision, som inputværdien skal afkortes for (for eksempelmonth
,hour
, etc). Se nedenfor for en komplet liste over acceptable værdier for dette argument.source
er et værdiudtryk af typen tidsstempel , tidsstempel med tidszone eller interval . Bemærk, at værdier af typen dato og tid castes automatisk til tidsstempel eller interval hhv.- Den valgfri
time_zone
argument kan angives for at angive en anden tidszone.
field
argument kan være et af følgende:
- mikrosekunder
- millisekunder
- sekund
- minut
- time
- dag
- uge
- måned
- kvartal
- år
- årti
- århundrede
- millennium
Grundlæggende eksempel
Her er et eksempel til at demonstrere.
SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');
Resultat:
2020-06-30 17:00:00
Vi kan se, at tidsdelen af datoen er blevet afkortet fra 17:29:31
til 17:00:00
. Det er fordi jeg brugte hour
for det første argument.
Her er det med forskellige værdier for det første 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');
Resultat (ved hjælp af lodret output):
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
I dette tilfælde brugte jeg \x
for at aktivere udvidet visning/lodret output, så det er nemmere at læse resultaterne.
Med tidszone
Her er et eksempel til at demonstrere WITH TIME ZONE
mulighed.
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');
Resultat:
date_trunc | 2020-07-01 03:00:00+10 date_trunc | 2020-07-01 02:00:00+10
Den lokale tidszone, da jeg kørte disse eksempler, var Australien/Brisbane.
Du kan også tilføje det fulde tidszonenavn som et tredje 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');
Resultat:
date_trunc | 2020-06-30 15:00:00+10 date_trunc | 2020-06-30 15:00:00+10
Med interval
Her er et eksempel, der bruger en intervalværdi i stedet for en dato.
SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');
Resultat:
7 days, 5:00:00