PLSQL中的时区转换

Suv*_*kar 3 sql oracle plsql plsqldeveloper

我需要将sysdate和time转换为特定的时区,如EST.我不能假设我目前的时区.

如何在plsql中转换它?请帮我.

Jus*_*ave 6

假设你有TIMESTAMP WITH TIME ZONE(例如systimestamp),你可以使用AT TIME ZONE语法.例如,我可以systimestamp通过指定不同的时区名称来获取当前值并将其转换为UTC(GMT),东部和太平洋时区.

SQL> ed
Wrote file afiedt.buf

  1  select systimestamp at time zone 'UTC' current_time_in_utc,
  2         systimestamp at time zone 'Us/Eastern' current_time_in_est,
  3         systimestamp at time zone 'US/Pacific' current_time_in_pst
  4*   from dual
SQL> /

CURRENT_TIME_IN_UTC
---------------------------------------------------------------------------
CURRENT_TIME_IN_EST
---------------------------------------------------------------------------
CURRENT_TIME_IN_PST
---------------------------------------------------------------------------
26-APR-12 05.36.11.802000 PM UTC
26-APR-12 01.36.11.802000 PM US/EASTERN
26-APR-12 10.36.11.802000 AM US/PACIFIC
Run Code Online (Sandbox Code Playgroud)


wee*_*oid 1

以下内容将为您提供当前 EST 时间(UTC - 5 小时),不考虑夏令时:

SELECT SYS_EXTRACT_UTC(SYSTIMESTAMP) FROM DUAL
Run Code Online (Sandbox Code Playgroud)

为了考虑夏令时,您有 2 个选择:

  1. 编写一个函数来计算夏令时发生变化的日期
  2. 填充包含这些日期的表

如果您只需要支持 EST 时区,那么编写一个函数可能是一个不错的选择;否则我建议填充一个包含这些日期的表,因为它们在时区之间有所不同