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:
fielder 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.sourceer 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_zoneargument 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