sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql date_trunc med tidszon ändrar zon med 1 timme

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 .




  1. Dynamisk anslutning till andra MySQL-databas i Ruby on Rails

  2. Hur validerar man heltalsvärden för att undvika SQL-injektion?

  3. MYSQL - Ordna efter ID I DESC Ordning, Gruppera efter X

  4. mysqldbcompare åtkomst nekad men mysql-kommandot fungerar