Để bắt đầu bằng:to_char()
trả về một chuỗi từ một ngày. Vì vậy, nếu bạn muốn một date
, không sử dụng nó, tức là thay thế cái này:
to_char(to_date(f_sta_date, 'YYYYMMDD') + (f_sta_time)/86400), 'YYYY-MM-DD HH24:MI:SS')
Tới:
to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400
Sau đó:khi nói đến quản lý múi giờ, bạn cần sử dụng timestamp with time zone
kiểu dữ liệu thay vì date
. Để chuyển đổi ngày của bạn theo giờ địa phương (tức là múi giờ trong phiên của bạn, được xác định bởi SESSIONTIMEZONE
) vào dấu thời gian và nhận ngày / giờ tương ứng lúc UTC, bạn có thể thực hiện:
cast(to_date(f_sta_date, 'YYYYMMDD') + f_sta_time/86400 as timestamp with time zone)
at time zone 'UTC'
Truy vấn của bạn:
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