SQL查询中的时区转换

时间:2014-04-08 09:58:32

标签: sql oracle gmt timezone-offset

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

   select to_char (new_time(application_recv_date,'gmt','est'), 'MON dd, YYYY') from application

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

3 个答案:

答案 0 :(得分:10)

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

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

例如:

EDT:

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

EST:

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

更新:

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

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

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

答案 1 :(得分:1)

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

Select current_timestamp, current_timestamp at time zone 'Australia/Sydney' from dual;

Australia/Sydney是您要转换时间的时区名称。

答案 2 :(得分:0)

已经存在一个函数,可将所需列的时间从一个时区转换为另一个时区:-

 convert_tz("columname or / the time you want to convert", fromTimeZone, ToTimeZone)

例如:- 我想将dateTIme列的时间从印度时间(IST)转换为巴西TimeZone,因为默认情况下印度的主机数据库时间是印度时间:-

  1. 印度时间是格林尼治标准时间+5:30
  2. 巴西时间是GMT-5:30

convert_tz(dl.modified_datetime,'+ 5:30','-3:00')'modified_time'

因此,在此过程中,您可以轻松对其进行转换。