I PostgreSQL, date_trunc()
funktionen trunkerar ett datum/tidsvärde med en specificerad precision.
Den kan också trunkera värdet till en specificerad precision i en angiven tidszon.
Du kan tänka dig det som en datumversion av trunc()
funktion (som trunkerar tal).
Syntax
Syntaxen ser ut så här:
date_trunc(field, source [, time_zone ])
Var:
field
är precisionen för vilken inmatningsvärdet ska trunkeras (till exempelmonth
,hour
, etc). Se nedan för en fullständig lista över acceptabla värden för detta argument.source
är ett värdeuttryck av typen tidsstämpel , tidsstämpel med tidszon , eller intervall . Observera att värden av typen datum och tid castas automatiskt till tidsstämpel eller intervall , respektive.- Den valfria
time_zone
argument kan tillhandahållas för att ange en annan tidszon.
field
argument kan vara något av följande:
- mikrosekunder
- millisekunder
- sekund
- minut
- timme
- dag
- vecka
- månad
- kvartal
- år
- decennium
- århundrade
- millenium
Grundläggande exempel
Här är ett exempel att visa.
SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');
Resultat:
2020-06-30 17:00:00
Vi kan se att tidsdelen av datumet har trunkerats från 17:29:31
till 17:00:00
. Det beror på att jag använde hour
för det första argumentet.
Här är det med olika värden för det första argumentet.
\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 (med vertikal utdata):
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 det här fallet använde jag \x
för att aktivera utökad visning/vertikal utdata, så att det är lättare att läsa resultaten.
Med tidszon
Här är ett exempel för att demonstrera WITH TIME ZONE
alternativ.
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 lokala tidszonen när jag körde dessa exempel var Australien/Brisbane.
Du kan också lägga till hela tidszonens namn som ett 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 intervall
Här är ett exempel som använder ett intervallvärde istället för ett datum.
SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');
Resultat:
7 days, 5:00:00