In PostgreSQL, de date_trunc()
functie kapt een datum/tijd-waarde af tot een gespecificeerde precisie.
Het kan de waarde ook afkappen tot een gespecificeerde precisie in een gespecificeerde tijdzone.
Je zou het kunnen zien als een datumversie van de trunc()
functie (die getallen afkapt).
Syntaxis
De syntaxis gaat als volgt:
date_trunc(field, source [, time_zone ])
Waar:
field
is de precisie waarvoor de invoerwaarde moet worden afgekapt (bijvoorbeeldmonth
,hour
, enzovoort). Zie hieronder voor een volledige lijst van acceptabele waarden voor dit argument.source
is een waarde-expressie van het type timestamp , tijdstempel met tijdzone , of interval . Merk op dat waarden van het type datum en tijd worden automatisch gegoten naar tijdstempel of interval , respectievelijk.- De optionele
time_zone
argument kan worden opgegeven om een andere tijdzone op te geven.
Het field
argument kan een van de volgende zijn:
- microseconden
- milliseconden
- tweede
- minuut
- uur
- dag
- week
- maand
- kwartaal
- jaar
- decennium
- eeuw
- millennium
Basisvoorbeeld
Hier is een voorbeeld om te demonstreren.
SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');
Resultaat:
2020-06-30 17:00:00
We kunnen zien dat het tijdsgedeelte van de datum is ingekort vanaf 17:29:31
tot 17:00:00
. Dat komt omdat ik hour
heb gebruikt voor het eerste argument.
Hier is het met verschillende waarden voor het eerste 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');
Resultaat (met verticale uitvoer):
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 dit geval gebruikte ik \x
om uitgebreide weergave/verticale uitvoer in te schakelen, zodat het gemakkelijker is om de resultaten te lezen.
Met tijdzone
Hier is een voorbeeld om de WITH TIME ZONE
te demonstreren optie.
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');
Resultaat:
date_trunc | 2020-07-01 03:00:00+10 date_trunc | 2020-07-01 02:00:00+10
De lokale tijdzone toen ik deze voorbeelden uitvoerde, was Australië/Brisbane.
Je kunt ook de volledige naam van de tijdzone toevoegen als derde 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');
Resultaat:
date_trunc | 2020-06-30 15:00:00+10 date_trunc | 2020-06-30 15:00:00+10
Met interval
Hier is een voorbeeld dat een intervalwaarde gebruikt in plaats van een datum.
SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');
Resultaat:
7 days, 5:00:00