Oracle
 sql >> Database >  >> RDS >> Oracle

Conversione del fuso orario nella query SQL

Puoi utilizzare questa query, senza doverti preoccupare delle modifiche al fuso orario.

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

Es:

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

AGGIORNAMENTO:

Grazie ad Alex Poole per aver ricordato che, quando non viene specificato il fuso orario, per la conversione viene utilizzato il fuso orario locale.

Per forzare il riconoscimento della data come GMT, utilizzare from_tz.

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