Na początek:to_char()
zwraca ciąg z daty. Więc jeśli chcesz date
, nie używaj go, tj. zastąp to:
to_char(to_date(f_sta_date, 'YYYYMMDD') + (f_sta_time)/86400), 'YYYY-MM-DD HH24:MI:SS')
Do:
to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400
Następnie:jeśli chodzi o zarządzanie strefami czasowymi, musisz użyć timestamp with time zone
typ danych zamiast date
. Aby przekonwertować datę na czas lokalny (tj. strefę czasową sesji, która jest zdefiniowana przez SESSIONTIMEZONE
) do znacznika czasu i uzyskaj odpowiednią datę/godzinę w UTC, możesz zrobić:
cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp with time zone)
at time zone 'UTC'
Twoje zapytanie:
select
to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 dt_sta,
to_date(f_sto_date, 'YYYYMMDD') + f_sto_time/86400 dt_sto,
cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp)
at time zone 'UTC' dt_sta_utc,
cast(to_date(f_sto_date, 'YYYYMMDD') + f_sto_time/86400 as timestamp)
at time zone 'UTC' dt_sto_utc
from t