Den förväntas ha två varianter av date_trunc
:en för timestamp
och en för timestamptz
, eftersom dokumentet
säger:
Om du vill förstå timestamp och timestamptz bättre, läs först det fantastiska svaret här .
Sedan om date_trunc
. Enligt mina experiment och tolkning av olika SO-svar (som denna
), allt beter sig som om, när man tar emot en tidsstämpel, date_trunc
konverterar det först till en tidsstämpel. Denna omvandling returnerar en tidsstämpel i lokal tid. Sedan utförs trunkering:behåll bara datumet och släpp timmar/min/sekunder.
För att undvika denna omvandling (tack pozs), ange en tidsstämpel (inte timestamptz) till date_trunc:
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')
delen at time zone 'UTC'
säger "konvertera denna tidsstämpel till en tidsstämpel i UTC-tid" (timmen påverkas inte av denna omvandling). Då returnerar date_trunc 2001-07-16 00:00:00
.