3 Stimmen

postgresql: zeitzonenabhängige Abfrage auf einen Zeitstempel ohne Zeitzone

Ich habe eine Tabelle mit einer timestamp without time zone (es wird angenommen, dass die eingegebenen Daten in der Spalte Australia/Sydney Zeitzone).

Abfrage von Daten für einen Zeitbereich (z.B. 8-16 Uhr) in America/New_York Zeitzone.

Gibt es eine einfache Möglichkeit, dies zu erreichen?

Danke, P.

3voto

pstanton Punkte 32494

Ich habe es herausgefunden.

Sie müssen zunächst die Zeit in ihre with time zone Version d.h. my_ts at time zone 'Australia/Sydney' und konvertieren diese dann in ihr NY-Gegenstück über at time zone 'America/New_York'

select
    my_ts as "Default(syd)",
    my_ts at time zone 'Australia/Sydney' as "SYD",
    my_ts at time zone 'Australia/Sydney' at time zone 'America/New_York' as "NY",
    date_part('hour', my_ts at time zone 'Australia/Sydney' at time zone 'America/New_York') as "NY-hr"
from my_table
where date_part('hour', my_ts at time zone 'Australia/Sydney' at time zone 'America/New_York')>=8
    and date_part('hour', my_ts at time zone 'Australia/Sydney' at time zone 'America/New_York')<16

0voto

nate c Punkte 8334

Sie können alles in dieselbe Zeitzone konvertieren, damit Sie sie miteinander vergleichen können (wenn die Zeitzone eingestellt wurde):

select current_time, current_time at time zone 'gmt';
      timetz       |     timezone      
-------------------+-------------------
 20:50:51.07742-07 | 03:50:51.07742+00

Wenn die Zeitzone nicht eingestellt ist und Sie sie um eine Ortszeit korrigieren müssen:

select now()::time, now()::time + '+8:00'::interval;
       now       |    ?column?     
-----------------+-----------------
 20:57:49.420742 | 04:57:49.420742

Wenn Sie die Zeit so eingestellt haben, wie Sie es wünschen, brauchen Sie nur die Stunde zu extrahieren und können eine einfache Bedingung verwenden, um die richtigen Zeiten auszuwählen.

select * 
  from 
  (select extract(hour from now()::time + '+8:00'::interval) as hour) as t 
  where hour between 8 and 16;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X