SQL查询中的时区转换

sat*_*ana 10 sql oracle gmt timezone-offset

我正在使用查询从Oracle DB获取一些应用程序收到日期,该日期存储为GMT.现在我必须在检索时将其转换为东部标准/夏令时.我使用以下查询:

   select to_char (new_time(application_recv_date,'gmt','est'), 'MON dd, YYYY') from application
Run Code Online (Sandbox Code Playgroud)

它适用于标准时间.但是对于夏令时,我们需要根据时区信息将其转换为'edt'.我不太清楚如何做到这一点.请帮帮我

Noe*_*oel 12

您可以使用此查询,而无需担心时区更改.

select to_char(cast(application_recv_date as timestamp) at time zone 'US/Eastern',
               'MON dd, YYYY'
              )
from application;
Run Code Online (Sandbox Code Playgroud)

例如:

美东时间:

select cast(date'2014-04-08' as timestamp) d1,
       cast(date'2014-04-08' as timestamp) at time zone 'US/Eastern' d2
from dual;

D1                                 D2
---------------------------------- -------------------------------------------
08-APR-14 12.00.00.000000 AM       07-APR-14 08.00.00.000000 PM US/EASTERN
Run Code Online (Sandbox Code Playgroud)

美东时间:

select cast(date'2014-12-08' as timestamp) d1,
       cast(date'2014-12-08' as timestamp) at time zone 'US/Eastern' d2
from dual;

D1                                 D2
---------------------------------- -------------------------------------------
08-DEC-14 12.00.00.000000 AM       07-DEC-14 07.00.00.000000 PM US/EASTERN
Run Code Online (Sandbox Code Playgroud)

更新:

感谢Alex Poole提醒,如果未指定时区,则使用本地时区进行转换.

要强制将日期识别为GMT,请使用from_tz.

from_tz(cast(date'2014-12-08' as timestamp), 'GMT') at time zone 'US/Eastern'
Run Code Online (Sandbox Code Playgroud)

  • @satyanarayana - `d2`正在从GMT转换为EDT,距离EatÂPeach的例子只有一个小时,因为它不应该在12月的白天节省 - 使用EST会起作用,但使用区域会更容易和更安全.`d3`正在从当地时区转变,而非GMT. (2认同)

Jit*_*mar 5

在 Oracle 中,您可以使用以下查询实现此目的:

Select current_timestamp, current_timestamp at time zone 'Australia/Sydney' from dual;
Run Code Online (Sandbox Code Playgroud)

Australia/Sydney您要转换时间的时区名称在哪里。