sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL:valg af rækker, der forekommer på en bestemt dag i ugen, i en bestemt tidszone

AT TIME ZONE når det anvendes på et timestamp without timezone producerer et timestamp with timezone (og den anden vej rundt). Og dette timestamp with timezone tolkes i din sessions tidszone (som i dit tilfælde er tvunget til UTC ).

Så udtrykket EXTRACT (dow from time at time zone 'Brisbane/Australia') udtrækker ikke dagen i Brisbane på time (UTC) , udtrækker den dagen svarende til den konverterede time set fra en person, der nærmest bor i UTC-tidszonen.

Som et eksempel, når jeg skriver dette, hvis jeg foregiver at være i UTC:

=> set timezone to 'UTC';
=> select now(),now() at time zone 'Australia/Brisbane';
             now              |         timezone          
------------------------------+---------------------------
 2013-10-27 18:01:03.15286+00 | 2013-10-28 04:01:03.15286

Fint, det er søndag 18:01 i UTC og mandag 04:01 i Brisbane

Men hvis man anvender tidszoneforskydningen på et timestamp without timezone :

select now(),now()::timestamp at time zone 'Australia/Brisbane';
              now              |           timezone            
-------------------------------+-------------------------------
 2013-10-27 18:01:57.878541+00 | 2013-10-27 08:01:57.878541+00

Bemærk, hvordan den anden kolonne adskiller sig fra det forrige resultat. Det er faktisk 20 timer væk fra Brisbane udtrykt i UTC:det er formentlig det teknisk korrekte svar på et spørgsmål, der ikke giver meget mening.

Formentlig ønsker du dette:

EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0

som skulle svare:gør dato og klokkeslæt time som målt i UTC svarer til en søndag i Brisbane?




  1. Rails migrationer over en eksisterende database

  2. BESTIL EFTER tilstand

  3. Sådan får du kalenderkvartal fra en dato i TSQL

  4. Forskel mellem MySQL/SQLite/etc-databaser?